大資料量下的分頁
郭紅俊
select * from orders where orderid between 10248 and 10253
select * from orders where orderid in (10248,10249,10250,10251,10252,10253) order by orderid desc
create table ##temptable(iid int identity (1, 1) not null,
mainid int not null
)insert ##temptable(mainid) select orderid from orders order by orderid desc
select * from ##temptable
drop table ##temptable -- 實際執行時候,刪除全部臨時表當然不再這裡執行。
create table ##temptable(iid int identity (1, 1) not null,mainid int not null)insert ##temptable(mainid) select orderid from orders order by orderid desc
declare @pagesize int,@currpage int,@strsql varchar(2000),@idstr varchar(1000)
select @pagesize = 30
select @currpage = 2
select @idstr = ''
select @idstr = @idstr + ltrim(rtrim(str(mainid))) + ',' from ##temptable
where iid between ((@currpage-1)*@pagesize+1) and @currpage*@pagesize
if @idstr <> ''
begin
select @idstr = left(@idstr,len(@idstr)-1)
endselect @strsql = 'select * from orders where orderid in ('+@idstr+') order by orderid desc '
exec(@strsql)
drop table ##temptable
declare @pagesize int,@currpage int,@topnum int,@previous int
select @pagesize = 30
select @currpage = 2
select @topnum = @currpage * @pagesize
select @previous = (@currpage - 1) * @pagesize
declare @i int,@idstr nvarchar(500),@strsql nvarchar(1000)
select @i = 0
select @strsql = n''
select @strsql = @strsql + n' select top '+str(@topnum)+ ' @i = @i + 1 '
select @strsql = @strsql + n', @idstr = '
select @strsql = @strsql + n'case when @i > '+str(@previous)+' then @idstr + ltrim(rtrim(str(orderid))) + '','' '
select @strsql = @strsql + n'else n''''end '
select @strsql = @strsql + n'from orders '
select @strsql = ltrim(rtrim(@strsql)) + n' order by orderid desc '
select @idstr = n''
exec sp_executesql @strsql,n'@i int,@idstr varchar(500) output',@i,@idstr output
if len(rtrim(ltrim(@idstr))) > 0
begin
select @idstr = left(@idstr,len(@idstr)-1)
endselect @strsql = 'select * from orders where orderid in ('+@idstr+')'
exec(@strsql)
protected void binddatagrid(int currpage); parms[0].value = datagrid1.pagesize;
parms[1].value = (currpage+1);
// 資料庫的分頁演算法第一頁是1 datagrid的第一頁是0
這裡演示了利用datagrid 的這個功能(沒有本文中討論的利用儲存過程獲得分割槽資料)。如對datagrid的這個功能不太熟悉,請先看這裡。
我的email是: ghj1976@csdn.***
大資料量分頁優化
用limit offset 時並不是先跳過再查詢 而是 先查詢,再跳過 limit 100w,10 先把100w取出來,然後跳過前100w行,所以大資料分頁用limit很慢 select id,name from lx com 5000000,10 先查詢出來5000000 select id,na...
大資料量下的分頁解決方法
最好的辦法是利用sql語句進行分頁,這樣每次查詢出的結果集中就只包含某頁的資料內容。再sql語句無法實現分頁的情況下,可以考慮對大的結果集通過遊標定位方式來獲取某頁的資料。sql語句分頁,不同的資料庫下的分頁方案各不一樣,下面是主流的三種資料庫的分頁sql sql server string sql...
Mysql大資料量分頁優化
假設有一個千萬量級的表,取1到10條資料 select from table limit 0,10 select from table limit 1000,10 這兩條語句查詢時間應該在毫秒級完成 select from table limit 3000000,10 你可能沒想到,這條語句執行之間...
大資料量下的sort
sort在linux命令列下面是一個非常好用的工具,有人把它當做每個程式設計師都應該知道的8個linux命令之一,最近在處理大資料的時候發現兩點。1.用sort u 而不是sort uniq。sort應該是按照歸併的思想來的,先分成一個個小檔案,排序後再組合成最後拍好序的檔案。所以,sort u 要...
大資料量下,分頁查詢優化方法解釋
演算法如這篇文章 之前老王也發過此方法 簡單解釋一下,也作為思路整理 1,使用stat作為一個單一索引 desc select id from table where stat 1 order by id limit 90000,5 1 table ref stat stat 1 const 151...