海量分页的简单分析

此文仅个人理解,不到之处望指出

     提出: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裁剪需要显示多少行数据.

 

 

     

 

 

      

posted @ 2017-05-06 00:08  王高啊  阅读(139)  评论(0编辑  收藏  举报