2011年2月25日 星期五

SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – 分頁功能

         在本次的SQL Server 2012的新特色更新中,我來介紹一下一個新提供的分頁功能T-SQL語法,在本次的介紹中,我將使用AdventureWorks2008R2資料庫來作為介紹,若還沒有安裝的,因為內建是沒有的,所以可以透過我上一篇的文章[安裝SQL Server 中的範例資料庫], 再進行安裝即可。

         我希望利用[Production].[TransactionHistory][Production].[Product]兩個表格來進行分頁的動作(因為這二個表格的資料比較多),首先我先查詢一下目前兩個表格的筆數為何。





       再來就是針對這兩個表格進行分頁的動作,此分頁寫法我透過ROW_NUMBER來完成。
SELECT TransactionID, ProductID, TransactionDate, Quantity, ActualCost, FROM
(
    SELECT ROW_NUMBER() OVER(ORDER BY TransactionID) row_id,
                   TransactionID, bb.ProductID, TransactionDate, Quantity, ActualCost,
    FROM Production.TransactionHistory aa INNER JOIN Production.Product bb ON
                   aa.ProductID = bb.ProductID
) aa
WHERE row_id BETWEEN 10001 and 10010



       當然我透過SQL Server 2012提供的新功能(OFFSETFETCH)來完成,而OFFSET主要就是決定從第幾行開始顯示資料,而FETCH NEXT則是決定你要秀出幾筆。

SELECT TransactionID, bb.ProductID, TransactionDate, Quantity, ActualCost
FROM Production.TransactionHistory aa INNER JOIN Production.Product bb ON
            aa.ProductID = bb.ProductID
ORDER BY TransactionID
OFFSET 10000 ROWS
FETCH NEXT 10 ROWS ONLY

 

        在實際比較這兩個語法後(透過Client Statistics),發現語法比較簡短所以傳輸量減少外,在執行時間上也有比較快一點,而成本也比原本的少4%,算是微有提升吧,希望正式版推出的時候效能會更好。

使用ROW_NUMBER語法的評估分析:



 

使用新語法(OFFSET與FETCH)的評估分析:


 

     以上主要介紹OFFSET與FETCH的使用方法,在使用上非常的方便,當然如果大家把他改成利用Storeed Procedure寫成一個分頁程式後,在執行與後續的利用一定會更好。

沒有留言:

張貼留言