在日期字段中,我有一个默认值,表示未完成任务。 当我查询找到所有已完成的任务时,如果我的默认日期是12/31/9999则更好?
SELECT * FROM Table WHERE Completed <> '12/31/9999'
OR
SELECT * FROM Table WHERE Completed < '12/31/9999'
或者它完全取决于我的索引。
答案 0 :(得分:9)
以下是WHERE子句中使用的关键运算符,按其性能排序。顶部的那些操作员将比底部列出的那些更快地产生结果。
=
>, >=, <, <=
LIKE
<>
答案 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