大資料量下的分頁

2021-03-31 16:11:16 字數 3435 閱讀 9615

大資料量下的分頁

郭紅俊

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...