我正在尝试加速数据库应用程序,我目前正在寻找对应用程序影响较小的简单事物。
我想知道什么是搜索字符串是否满足条件的最有效方法。使用第一个选项是否有任何正当理由。
所以说有一个字段调用状态,它只会将值存储为 Discontinued。
- 状态 NOT LIKE 'Disc%'
- status != '停产'
- 状态 <> '停产'
我正在尝试加速数据库应用程序,我目前正在寻找对应用程序影响较小的简单事物。
我想知道什么是搜索字符串是否满足条件的最有效方法。使用第一个选项是否有任何正当理由。
所以说有一个字段调用状态,它只会将值存储为 Discontinued。
没有理由使用NOT LIKE
. 是否使用不等式运算符!=
的<>
形式完全取决于个人喜好。
出于讨论的目的,我假设 STATUS 字段可以为空,因此将包含两个值,“Discontinued”或 NULL。如果是这种情况,您上面的任何查询都不会产生预期的结果。STATUS <> 'Discontinued'
当 NULL 与任何东西比较时,它返回 NULL 而不是 TRUE 或 FALSE,因此当谓词 is或其他时,不会返回 STATUS 为 NULL 的行。为了得到结果,我认为你期望你必须说STATUS IS NULL
。
分享和享受。
我会投票给第二个。第一个将强制进行表扫描。
写两个,解释计划,然后看看。
包含单个值或空值的列不太可能对您对该表运行的任何查询的性能产生任何影响,尤其是在您搜索不等于该值的行时。
因此,无论该列是否被索引,这些选项中的任何一个都将表现得同样好。然而,作为一种意图的表达——无论是对你的开发人员和数据库优化器——最好将其编码为:
status is null