海量分頁的簡單分析
此文僅個人理解,不到之處望指出
提出: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 @[email protected]
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裁剪需要顯示多少行數據.
海量分頁的簡單分析