Sql Server 資料分頁

2021-07-24 23:07:22 字數 1960 閱讀 4732

1、引言

在列表查詢時由於資料量非常多,一次性查出來會非常慢,就算一次查出來了,也不能一次性顯示給客戶端,所以要把資料進行分批查詢出來,每頁顯示一定量的資料,這就是資料要分頁。

2、常用的資料分頁語法

先查出 top 300000,再聚合取這個集合中最大的id1,再過濾 id大於id1的集合(上圖中使用到索引),再取top 10 條。

語句形式:

select

top10

*from tbl_flightsdetail where flightsdetailid>

(

select

max(flightsdetailid) from

(

select

top3000000 flightsdetailid from tbl_flightsdetail order

byflightsdetailid

) ast

) order

by flightsdetailid

和方法一類似,只是過濾where條件不一樣,這裡用到的是not in,上圖中沒有用到索引,耗時8秒。如果 flightsdetailid不是索引的話,方法1和該方法將差不多。

語句形式:

select

top10

*from tbl_flightsdetail where flightsdetailid notin(

select

top3000000 flightsdetailid from tbl_flightsdetail order

byflightsdetailid

) order

by flightsdetailid

先取 前面3000010條記錄,再倒序,這時再取前面10條即是300001 到300010條記錄,沒有用到索引,耗時11秒
語句形式:
select

top10

*from

(

select

top3000010

*from tbl_flightsdetail order

byflightsdetailid

) as t order

by t.flightsdetailid desc

sql 2005版本或以上支援,也沒用到索引,耗時2秒,速度還不錯。

語句形式:

select

*from

(

select

*,row_number() over (order

by flightsdetailid) as rank from

tbl_flightsdetail

) as t where t.rank between

3000001

and3000010

多次執行之後一般維持在4秒左右,用到索引,非常不錯,計畫圖還很長,只擷取部分,可能是繞的多一點。

select

top10

*from tbl_flightsdetail where flightsdetailid in

(

select

top10 flightsdetailid from

(

select

top3000010 flightsdetailid from tbl_flightsdetail order

byflightsdetailid

) as t order

by t.flightsdetailid desc

) order

by flightsdetailid

SQLServer 的資料分頁

sqlserver 的資料分頁 假設現在有這樣的一張表 create table test id int primary key not null identity,names varchar 20 然後向裡面插入大約1000條資料,進行分頁測試 假設頁數是10,現在要拿出第5頁的內容,查詢語句如下...

SQLServer 的資料分頁

假設現在有這樣的一張表 create table test id int primary key not null identity,names varchar 20 然後向裡面插入大約1000條資料,進行分頁測試 假設頁數是10,現在要拿出第5頁的內容,查詢語句如下 10代表分頁的大小 selec...

sqlserver 資料分頁 多個主鍵

在sqlserver中,資料庫的分頁一般結合top 和 not in 來實現,但這必須是表中只有乙個主鍵,如果有多個主鍵該怎麼做呢 現在有乙個表a 裡面有欄位 name schoolyear text 其中name 和 schoolyear為主鍵 如果要查詢 pagesize 條資料,第 page ...