2017年10月2日 星期一

[SQL] Compare Operator - where ">", ">=", "<", "<=" and "Between ... and ..."

  • sql 使用 where 下列使否影響查詢成本
    • ">", ">=", "<", "<=" 
    • "Between ... and ..."
    • 查詢資料量是否會影響查詢成本
  • 資料庫使用 Adventure Works for SQL Server 2012 的資料表 Production.Product 
    • Step 1. 加入 NonClustered 包含 ReorderPoint, ProductID 
    • Step 2. 查詢
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:
      1. ">", ">=", "<", "<=" 與 "Between ... and ...",查詢成本相同
      2. 查詢資料量大小,會直接影響 Query Optimizer 執行計畫所採用的處理方式
      3. "非叢集索引" 適合少量資料查詢
      4. 當回傳資料列變多,"查閱"的查詢成本變高,所以 Query Optimizer 直接採用 "叢集索引掃描" 方式降低查詢成本
    • 補充:
      •  如需 Query Optimizer 更精準預測,使用 sp_updatestats 更新 SQL Server 統計資料
 
  • REF:
    • SQL Server 效能調校

    沒有留言:

    張貼留言