问题说明
smartbi中Sql分页和结果集分页的区别在哪?
思路
分页策略:系统设置:表示读取 系统选项 > 查询设置> 分页策略 中的设置。初始值为SQL分页。
此分页策略用于比较特殊(某些数据库在创建SQL查询嵌套Order时执行不通过)的情况,建议在遇到此情况直接使用原生SQL查询。
- SQL分页:表示查询外套一层后根据返回结果分段分页。
- 结果集分页:表示不封装一层的SQL,直接把SQL预览中的语句放到数据库中执行然后取行分页。
1) 首先需要明白:可视化查询和sql查询均会在预览的sql外面封装一层。原生sql查询则是手工输入什么sql,后台执行什么sql。
2) 基于可视化查询和sql查询封装的这一层,可设置sql分页。所以可视化查询和sql查询可以设置sql分页以及结果集分页,但是原生sql查询只能进行结果集分页。
比如,有100条数据,每页显示10条:
A、设置sql分页
输入的sql语句为下图:
后台的分页取数机制是,在封装的外层sql中用limit语句来限制取数的范围,如下图:
ps:sql分页中的limit后面单次返回的取数范围是由设置的每页行数和【系统选项-高级设置】中的返回内存数据库的最大行数中最大的那一个决定的。
比如说这里设置了每页展示10行,但是内存行数限制是200,那200>10,那就一次取200行,也就是limit 200。
B、结果集分页
展示第一页数据:在数据库中,先将select * from table这个语句执行出来,要取1000条数据,先从第1行数据开始数,获取后面1000条数据在是smartbi中展示;
展示第二页数据:在数据库中,再次执行select * from table语句,还是从第1行数据开始数,数到1000行,获取1000后面1000条的数据在smartbi中展示;
......
以此类推;
所以,若是通过结果集分页,越是展现后面页的数据,速度会越慢。