在日期字段中,我有一個默認值,指示未完成任務。 當我查詢找到所有完成的任務,如果我的默認日期是12/31/9999,那麼這會更好嗎?SQL日期查詢:'不等於'比'小於'更昂貴
SELECT * FROM Table WHERE Completed <> '12/31/9999'
OR
SELECT * FROM Table WHERE Completed < '12/31/9999'
或者它完全取決於我的索引。
在日期字段中,我有一個默認值,指示未完成任務。 當我查詢找到所有完成的任務,如果我的默認日期是12/31/9999,那麼這會更好嗎?SQL日期查詢:'不等於'比'小於'更昂貴
SELECT * FROM Table WHERE Completed <> '12/31/9999'
OR
SELECT * FROM Table WHERE Completed < '12/31/9999'
或者它完全取決於我的索引。
以下是WHERE子句中使用的關鍵運算符,按其性能排序。頂部的那些運營商將產生比底部列出的結果更快的結果。
=
>, >=, <, <=
LIKE
<>
在該列表上放置LIKE似乎有點武斷。它可以在頂部使用'='(如果沒有通配符)或底部(如果使用通配符) – 2012-03-16 15:44:24
謝謝,這看起來應該是一個很好的通用規則。因爲我不是dba。 – Nate 2012-03-16 15:46:37
我沒有很好地理解你的問題,但這種比較完全取決於你的索引。
沒有太大的差別可能。
如果Completed
使用索引來滿足查詢則<>
將有兩個範圍尋求(< '12/31/9999'
和> '12/31/9999'
)而不僅僅是<
尋求。
所以最好使用<
避免不必要的額外>
尋求不返回任何東西。
謝謝,這有助於我理解查詢的查找方面。 – Nate 2012-03-16 15:45:58
你說:
在日期字段我有一個默認值,指示任務
它使該字段爲可以爲空和更有意義的一個未完成的默認值爲null。所以,這個領域缺乏日期意味着任務尚未完成。
您可以通過更改表格並將默認值設置爲空以及更新所有值爲'12/31/9999'的所有值爲空來輕鬆解決此問題。然後,你將運行的查詢將是:
SELECT * FROM Table WHERE Completed IS NOT NULL
就像在旁邊。我見過一些決定將日期存儲爲零而不是空的數據庫。儘量避免這種做法,因爲它可能會導致實際問題以後再查詢。只要將它們保留爲空即可。 – Rob 2012-09-05 14:09:22
如果沒有完成日期,它會不使用更多的語義意義使用NULL? – 2012-03-16 15:31:12
這是第一次記錄的Y10K錯誤嗎? – 2012-03-16 15:35:16