我希望利用[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提供的新功能(OFFSET與FETCH)來完成,而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)的評估分析:
其他相關網址:
- SQL Server 2012 Code Name(Denali) 新功能介紹與預覽
- SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – 分頁功能
- SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – Sequence
- SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – Code Snippet Manager
- SQL Server 2012(Code Name Denali) - 以列為主的新儲存方式(雲端儲存架構)
- SQL Server 2012(Code Name Denali) - FileTable介紹
- 微軟介紹雲端平台就緒的資訊 - TechEd 2011
- SQL Server 2012 (Code Name Denali) - HA 新功能 - AlwaysOn
- SQL Server 2012 新功能 - AlwaysOn安裝與設定
- SQL Server 2012 RTM 預覽與介紹
沒有留言:
張貼留言