在Oracle中搜索速度更快

时间:2012-05-16 16:59:00

标签: sql performance oracle query-optimization

我正在尝试加速数据库应用程序,我目前正在寻找对应用程序影响较小的简单方法。

我想知道搜索一个String是否符合条件的最有效方法。使用第一个选项是否有任何正当理由。

所以说有一个字段调用状态,它只会将值存储为Discontinued。

  • 状态不像'Disc%'
  • status!='已停止'
  • status<> '停产'

4 个答案:

答案 0 :(得分:3)

没有理由使用NOT LIKE。无论您使用不平等运算符的!=还是<>形式,都只是个人偏好问题。

答案 1 :(得分:1)

出于讨论的目的,我假设STATUS字段可以为空,因此将包含两个值“Discontinued”或NULL。如果是这种情况,上述任何查询都不会产生预期结果。当NULL与任何东西进行比较时,它返回NULL而不是TRUE或FALSE,因此当谓词为STATUS <> 'Discontinued'或其他时,将不返回STATUS为NULL的行。为了得到结果,我认为你期望你不得不说STATUS IS NULL

分享并享受。

答案 2 :(得分:0)

我会投票给第二个。第一个将强制进行TABLE SCAN。

同时写两个,EXPLAIN PLAN,然后看看。

答案 3 :(得分:0)

保存单个值或null的列不太可能对您针对该表运行的任何查询的性能产生任何影响,尤其是在您搜索不等于那个值。

因此,无论该列是否已编入索引,任何这些选项都将表现得同样出色。但是,作为意图的表达 - 对于您的开发人员和数据库优化器 - 最好将其编码为:

status is null