将
WHERE substr(my_field,1,6) = 'search'
或者
WHERE my_field LIKE 'search%'
在Oracle中更快,还是没有区别?
假设最大的性能是目标,那么我将理想地选择SUBSTR(my_field,1,6)并创建一个基于函数的索引来支持查询。
SUBSTR(my_field,1,6)
CREATE INDEX my_substr_idx ON my_table( substr( my_field,1,6 ) );
正如其他人指出的那样,SUBSTR(my_field,1,6)将无法在上使用常规索引MY_FIELD。LIKE版本可能使用索引,但是在这种情况下,优化器的基数估计通常很差,因此很有可能不使用索引(如果有帮助的话),或者使用索引(最好是表扫描)。索引实际表达式将为优化器提供更多信息,以便更正确地选择索引。比我聪明的人也许可以提出一种在11g中使用虚拟列统计信息的方法,以便为LIKE查询提供优化器更好的信息。
MY_FIELD
如果6是变量(即您有时想搜索前6个字符,有时又想搜索其他数字),则可能无法提出基于函数的索引来支持该查询。在这种情况下,使用LIKE公式可以使优化器的决策变幻莫测。