将
WHERE substr(my_field,1,6) = 'search'
Run Code Online (Sandbox Code Playgroud)
要么
WHERE my_field LIKE 'search%'
Run Code Online (Sandbox Code Playgroud)
在Oracle中更快,还是没有区别?
Jus*_*ave 20
假设最高性能是目标,我理想情况下会选择SUBSTR(my_field,1,6)
并创建一个基于函数的索引来支持查询.
CREATE INDEX my_substr_idx
ON my_table( substr( my_field,1,6 ) );
Run Code Online (Sandbox Code Playgroud)
正如其他人指出的那样,SUBSTR(my_field,1,6)
无法使用常规索引MY_FIELD
.LIKE版本可能使用索引,但在这种情况下优化器的基数估计通常相当差,因此很可能在有用时不使用索引,或者在表扫描更可取时使用索引.索引实际表达式将为优化器提供更多信息,因此更有可能正确选择索引.比我聪明的人可能能够建议一种方法来使用11g中的虚拟列的统计信息来为优化器提供更好的LIKE查询信息.
如果6是一个变量(即你有时想搜索前6个字符,有时想搜索不同的数字),你可能无法想出一个基于函数的索引来支持该查询.在这种情况下,你可能会更好地利用LIKE公式中优化器决策的变幻莫测.
bea*_*ach 10
在提供的两个选项中,绝对是喜欢的.必须对表中的所有行执行substring方法.使用LIKE将允许使用索引.
要检查我的答案,只需分析结果.应该清楚这一天.