首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server時間範圍查詢優化:捨棄DateDiff改用直接比較

     編輯:關於SqlServer

常見寫法:DateDiff + GetDate

SELECT COUNT(*) FROM table WHERE DATEDIFF(s, GetDate(), thetime) > 0
-- 50萬筆測試:~1200 ms

優化寫法:直接比較

SELECT COUNT(*) FROM table WHERE thetime > GetDate()
-- 同測試:~750 ms(快近500 ms,提升40%)

原理

DATEDIFF是**非SARGable**函數,導致優化器無法使用thetime上的索引,掃描全表逐行計算。直接比較thetime > GetDate()保持欄位「裸露」,優化器可執行**索引尋找/範圍掃描**,大幅減少I/O與CPU。

延伸原則

  • 所有WHERE column_func(col) OP value形式均破壞索引使用。
  • 改寫為WHERE col OP value_func(value)(運算移至右側常數)。
  • 時間查詢同理:WHERE created_at >= DATEADD(day, -7, GETDATE())優於WHERE DATEDIFF(day, created_at, GETDATE()) <= 7。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved