sqlserver分頁查詢語句效能分析

2022-02-21 02:16:12 字數 1715 閱讀 6028

目的:通過三種不同的分頁查詢語句的寫法來比較其效能。

環境:windows server 2003 sp2 ,sqlserver2008。

資料準備:100萬條資料。

說明:下列sql語句中 pagesize表明每頁記錄條數 pageindex表示頁碼 table表示表明,id表示table表中的主鍵。

方法1:

select

toppagesize*

fromtablewhereidnot

in (select

top (pagesize* (pageindex-

1))idfromtable)

方法2:

select

toppagesize*

fromtablewhereid> ( select

isnull(max(id),0) from (select

top (pagesize* (pageindex-

1))idfromtableorder

byid) tb)

方法3:

select

toppagesize*

from

(

select row_number() over (order

byid

) as rownumber,*

from

table

) tb

where rownumber >pagesize* (pageindex-

1)

測試分析:

pagesize=10。

1.pageindex<1000。查詢效率沒有差別。

2.1000<= pageindex<10000。查詢效率方法2比方法1和方法3效率低一半。體查詢時間都很短,因此效率差別可忽略不計。

3.10000<= pageindex<50000。查詢效率方法2最快,方法3次之,方法1最慢,方法2和3效率差別可忽略。方法1明顯表現慢。

4.50000<= pageindex<100000。查詢效率方法2最快,方法3次之,方法1最慢。方法2的查詢速度接近方法1的三分之一。方法3的查詢速度接近方法1的二分之一。

5.pageindex=100000。查詢效率方法2最快,方法3次之,方法1最慢。方法2的查詢速度接近方法1的四分之一。方法3的查詢速度接近方法1的二分之一。

由此可見當資料量不大的時候三種查詢方法效率差不多。當資料量超過10萬的時候就開始有明顯差距。資料量越大效率差距越明顯。

因此在寫分頁查詢sql語句的時候優先考慮方法二。但是方法二的id必須是int型別。因此當表的主鍵不是int型別的時候使用方法3。

SQL Server 分頁查詢語句

create database xuhanglove gouse xuhanglove gocreate table product pid int primary key identity 1,1 pname varchar 255 not null unique,price float pdat...

sql server分頁查詢語句

sqlserver分頁查詢 查詢10條第一頁資料 10代表一頁多少條 頁數為10 1 1 select top 10 from dbo userinfo where ui fvaruserid not in select top 0 ui fvaruserid from dbo userinfo o...

Sql Server分頁語句

分頁方案一 利用not in和select top分頁 語句形式 select top 10 from testtable where id not in select top 20 id from testtable order by id order by id select top 頁大小 f...