SQLSERVER分頁查詢關(guān)于使用Top方式和row_number()解析函數(shù)的不同
臨近春節(jié),心早已飛了不在工作上了,下面小編給大家整理些數(shù)據(jù)庫的幾種分頁查詢。
Sql Sever 2005之前版本:
select top 頁大小 * from 表名 where id not in ( select top 頁大小*(查詢第幾頁-1) id from 表名 order by id ) order by id
例如:
select top 10 * --10 為頁大小 from [TCCLine].[dbo].[CLine_CommonImage] where id not in ( --40是這么計算出來的:10*(5-1) -- 頁大小*(查詢第幾頁-1) select top 40 id from [TCCLine].[dbo].[CLine_CommonImage] order by id ) order by id
結(jié)果為:
Sql Sever 2005及以上版本,多了個分頁查詢方法:
/* * firstIndex:起始索引 * pageSize:每頁顯示的數(shù)量 * orderColumn:排序的字段名 * SQL:可以是簡單的單表查詢語句,也可以是復雜的多表聯(lián)合查詢語句 */ select top pageSize o.* from (select row_number() over(order by orderColumn) as rownumber,* from(SQL) as o where rownumber>firstIndex;
例如:
select top 10 numComImg.* from ( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg) as numComImg where rownumber>40
結(jié)果:
這兩個方法,就僅僅是多了一列 rewnumber 嗎?當然不是,來看下內(nèi)部差別吧:
在兩個SQL上,分別加入以下SQL,并使用MS的“包括執(zhí)行計劃”,便于查看執(zhí)行詳情:
SET STATISTICS TIME ON GO
要執(zhí)行的SQL:
SET STATISTICS TIME ON GO select top 10 numComImg.* from ( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg) as numComImg where rownumber>40 SET STATISTICS TIME ON GO select top 10 * --10 為頁大小 from [TCCLine].[dbo].[CLine_CommonImage] where id not in ( --40是這么計算出來的:10*(5-1) -- 頁大小*(查詢第幾頁-1) select top 40 id from [TCCLine].[dbo].[CLine_CommonImage] order by id ) order by id
執(zhí)行之后,查看執(zhí)行計劃:
看得出,兩個同樣功能的SQL,執(zhí)行時,使用 row_number() 的,要比是用 純TOP方式的,查詢開銷少得多,上圖顯示 28:72,純top方式,使用了兩次聚集掃描。
再來看下執(zhí)行時間信息:
row_number()方式的:
純top方式:
相比之下,還是row_number()解析函數(shù)效率比較高寫。
以上所述是小編給大家分享的SQLSERVER分頁查詢關(guān)于使用Top方式和row_number()解析函數(shù)的不同,希望對大家有所幫助。
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。