SQLSERVER分頁查詢關於應用Top方法和row_number()解析函數的分歧。本站提示廣大學習愛好者:(SQLSERVER分頁查詢關於應用Top方法和row_number()解析函數的分歧)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLSERVER分頁查詢關於應用Top方法和row_number()解析函數的分歧正文
鄰近春節,心早已飛了不在任務上了,上面小編給年夜家整頓些數據庫的幾種分頁查詢。
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
成果為:
Sql Sever 2005及以上版本,多了個分頁查詢辦法:
/* * firstIndex:肇端索引 * pageSize:每頁顯示的數目 * orderColumn:排序的字段名 * SQL:可所以簡略的單表查詢語句,也能夠是龐雜的多表結合查詢語句 */ 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
成果:
這兩個辦法,就僅僅是多了一列 rewnumber 嗎?固然不是,來看下外部差異吧:
在兩個SQL上,分離參加以下SQL,並應用MS的“包含履行籌劃”,便於檢查履行概況:
SET STATISTICS TIME ON GO
要履行的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
履行以後,檢查履行籌劃:
看得出,兩個異樣功效的SQL,履行時,應用 row_number() 的,要比是用 純TOP方法的,查詢開支少很多,上圖顯示 28:72,純top方法,應用了兩次集合掃描。
再來看下履行時光信息:
row_number()方法的:
純top方法:
比擬之下,照樣row_number()解析函數效力比擬高寫。
以上所述是小編給年夜家分享的SQLSERVER分頁查詢關於應用Top方法和row_number()解析函數的分歧,願望對年夜家有所贊助。