- sql 使用 Order by
- 觀察查詢成本
- 如何利用索引先天的排序特性來提升效能
- 資料庫使用 Adventure Works for SQL Server 2012 的資料表 Production.Product 產生 3 種不同資料表
- tbProduct01:Heap
- tbProduct02:NonClustered Index (Name)
- tbProduct03:Clustered (ProductID), NonClustered Index (Name)
select ProductID, Name from tbProduct01 order by ProductID
select ProductID, Name from tbProduct02 order by ProductID
select ProductID, Name from tbProduct03 order by ProductID
- 查詢結果
- 查詢 1, 2:因採用 "Heap",本身未依指定資料行排序,所以輸出前需經過 "排序" 作業處理,而多出 59% 的成本
- 查詢 3: Clustered 的 "鍵值資料行" 為排需所依據的資料行,因而不需要額外花費 "排序" 成本
select ProductID, Name from tbProduct01 where Name like 'Thin-Jam%' order by Name
select ProductID, Name from tbProduct02 where Name like 'Thin-Jam%' order by Name
select ProductID, Name from tbProduct03 where Name like 'Thin-Jam%' order by Name
- Result:
- "索引" 會事先依據 "鍵值資料行" 進行遞增或遞減排序
- 查詢的排序資料行能使用到 "索引" 的 "鍵值資料行",就能減少額外 "排序" 成本
- REF:
沒有留言:
張貼留言