- Step 1. 加入 NonClustered 包含 ReorderPoint, ProductID
select * from Production.Product where ReorderPoint >= 100 and ReorderPoint <= 300
select * from Production.Product where ReorderPoint between 100 and 300
select * from Production.Product where ReorderPoint between 100 and 900
select * from Production.Product with (index(ncIndex))
where ReorderPoint between 100 and 900
- Step 3. 查詢結果
- 查詢 1, 2 (">", ">=", "<", "<=" 與 "Between ... and ..."):查詢成本相同
- 查詢 3:
- 當查詢資料量大,所查詢成本會增加
- 查詢 1, 2 所使用 "索引掃描",查詢 3 因資料量變大所使用 "叢集索引掃描"
- 查詢 4:查詢方法強制採用 "索引搜尋" 反而查詢成本更高
- Result:
- ">", ">=", "<", "<=" 與 "Between ... and ...",查詢成本相同
- 查詢資料量大小,會直接影響 Query Optimizer 執行計畫所採用的處理方式
- "非叢集索引" 適合少量資料查詢
- 當回傳資料列變多,"查閱"的查詢成本變高,所以 Query Optimizer 直接採用 "叢集索引掃描" 方式降低查詢成本
- 補充:
- 如需 Query Optimizer 更精準預測,使用 sp_updatestats 更新 SQL Server 統計資料
沒有留言:
張貼留言