SQL日期查询:'不等于'比'小于'更贵

时间:2012-03-16 15:26:57

标签: sql-server

在日期字段中,我有一个默认值,表示未完成任务。 当我查询找到所有已完成的任务时,如果我的默认日期是12/31/9999则更好?

SELECT * FROM Table WHERE Completed  <> '12/31/9999'

OR

SELECT * FROM Table WHERE Completed  < '12/31/9999'

或者它完全取决于我的索引。

4 个答案:

答案 0 :(得分:9)

以下是WHERE子句中使用的关键运算符,按其性能排序。顶部的那些操作员将比底部列出的那些更快地产生结果。

 =
>, >=, <, <=
LIKE
<>

http://www.sql-server-performance.com/2007/t-sql-where/

答案 1 :(得分:1)

可能差别不大。

如果Completed上的索引用于满足查询,则<>将是两个范围搜索(< '12/31/9999'> '12/31/9999'),而不仅仅是{{1}寻求。

最好使用<来避免不返回任何内容的不必要的额外<搜索。

答案 2 :(得分:0)

我不太了解你的问题,但这种比较完全取决于你的索引。

答案 3 :(得分:0)

你说:

  

在日期字段中,我有一个默认值,表示未完成任务

使该字段可以为空并使默认值为null更有意义。因此,该字段中缺少日期意味着任务尚未完成。

您可以通过更改表格并将默认值设置为null以及将compeleted = '12 / 31/9999'中的所有值更新为null来轻松解决此问题。然后,您将运行的查询将是:

SELECT * FROM Table WHERE Completed IS NOT NULL