這篇介紹 Denali 的分頁改善。
假如你的分頁操作是使用 Denali 的Offset and Fetch First/Next,
那麼你將感受到分頁操作就是這麼簡單且更有效率。
OFFSET:依指定列數開始查詢資料。
FETCH FIRST / NEXT :以 offset 起始列數往下取得總筆數。
操作示範
假設今天我希望每頁顯示15筆資料,
SQL2005/2008 我想大家都會透過row_number function 來達到分頁效果,
這裡我會做個效能比較測試,
後面你能透過效能結果比較表來得知兩者效能上的差異。
Denali 分頁操作
declare @currentpage int,@pagecount int
set @currentpage=0 --現在頁數(0=第一頁)
set @pagecount=15--每頁顯示筆數
select * from Production.TransactionHistory t1
order by t1.TransactionID
Offset @currentpage*@pagecount rows --第一筆 rownum
fetch next @pagecount rows only --從第一筆 rownum 往下取得總筆數
I/O and Time統計資訊。
執行計畫總成本。
SQL2005/2008 分頁操作
declare @currentpage int,@pagecount int
set @currentpage=0 --現在頁數(0=第一頁)
set @pagecount=15--每頁顯示筆數
;with mycte as
(
select row_number() over (order by TransactionID) 'rownum',*
from Production.TransactionHistory
)
select * from mycte
where rownum >(@currentpage*@pagecount) and rownum<=(@currentpage*@pagecount)+@pagecount
I/O and Time統計資訊。
執行計畫總成本(和Denali 執行計畫比較可說複雜許多)。
一起比較兩者執行計畫成本
Denali執行計畫較優於SQL2005/2008。
效能比較結果表
MS SQL Server新特性探險:探險代碼 Denali 全系列文章