此文仅个人理解,不到之处望指出
提出:easyui的datagrid组件有海量分页的内容,通过查询数据库的所有数据在表格进行分页浏览,因为数据量多,也叫海量分页,
网上实现方式有很多,这里用存储过程.
搭建: 使用sql server2012
测试表的属性:
插入数据:
declare @x int
set @x = 1 while @x <= 50000 --插入5万条数据 begin insert into TBInfors select '第'+CONVERT(varchar(20),@x)+'条数据标题', '第'+CONVERT(varchar(20),@x)+'个作者',GETDATE() set @x=@x+1 end
分页实现:
declare @pagesize int,@pageindex int;
set @pagesize = 10;
set @pageindex = 3;
select top (@pagesize) * from TBInfors
where id not in
(
select top (@pagesize*(@pageindex-1)) id from TBInfors
order by id
)
order by id
分页分析:
分页所具备的条件参数
@pageSize 页面显示的数据量,也就是多少行
@pageIndex 页面的索引,显示第几页的数据
里面的查询为什么要-1,其实大有讲究
假设你要查询第二页的数据,显示的是11 – 20,首先你得过滤到前面10行的数据,
里面查询到10*(2-1) = 10行的ID,然后根据嵌套查询,查询不是这10行ID的
其他(id not in)的全部数据(表的所有数据),最后根据你需要在页面显示多少行数据,
用top过滤出来,这里,我们就可以抽象出规律出来,索引减1乘以显示数据量,是为了找到当前索引前面的数据量,
通过外面查询的id not in条件过滤到前面的数据,相对的,它会包含所有的数据,这个时候再用top裁剪需要显示多少行数据.