Jos*_*ons 14 sql oracle performance
这个
SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE '%some_value%';
Run Code Online (Sandbox Code Playgroud)
比这慢
SELECT * FROM SOME_TABLE WHERE SOME_FIELD = 'some_value';
Run Code Online (Sandbox Code Playgroud)
但是这个怎么样?
SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE 'some_value';
Run Code Online (Sandbox Code Playgroud)
我的测试表明第二个和第三个例子完全相同.如果这是真的,我的问题是,为什么要使用"="?
Dav*_*dge 18
使用绑定变量时会有明显的区别,您应该在Oracle中使用绑定变量,而不是数据仓库或其他批量数据操作.
以下为例:
SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE :b1
Run Code Online (Sandbox Code Playgroud)
Oracle无法知道:b1的值是'%some_value%'或'some_value'等,直到执行时间,因此它将基于启发式估计结果的基数,并提出适当的计划,或者可能适用于或不适合以下各种值:b,例如'%A','%','A'等.
类似的问题可以应用于等式谓词,但是例如,基于列统计或存在唯一约束,可以更容易地估计可能产生的基数范围.
所以,我个人不会开始使用LIKE作为=的替代品.优化器有时很容易被愚弄.
查看两者的EXPLAIN PLAN.它们生成相同的执行计划,因此对于数据库来说,它们是相同的.
您将使用=来测试相等性,而不是相似性.如果您正在控制比较值,那么它并没有太大的区别.如果这是由用户提交的,那么'apple'和'apple%'会给你很多不同的结果.