LIKE%term%vs. LIKE%term

时间:2014-09-15 19:14:54

标签: mysql sql

以下两个查询之间是否有任何性能优势:

SELECT path FROM path WHERE name LIKE '%filename'

或 -

SELECT path FROM path WHERE name LIKE '%filename%'

MySQL执行会有什么不同?除了语法正确性之外,使用%term优于%term%会有什么好处吗?

3 个答案:

答案 0 :(得分:4)

%filename将匹配字段END处filename的任何记录。

%filename%将匹配任何位于该字段内的filename的记录。

e.g。

                  %filename      filename%     %filename%
filenamefoobar        N              Y              Y
foofilenamebar        N              N              Y
foobarfilename        Y              N              Y
argielbargle          N              N              N

某些DBMS系统可能足够智能,可以将%filename转换为字符串末尾的匹配项。但一般来说,任何具有前导LIKE通配符的%查询都会阻止使用索引。

答案 1 :(得分:2)

性能差异?为什么不只是运行查询版本并亲自看看。

在上述查询中,您正在检查两种不同的内容。

LIKE '%filename'您正在使用name字符串检查filename列结尾的值。

name LIKE '%filename%'您正在检查name列的值,其中包含filename字符串。

答案 2 :(得分:0)

在这两种情况下,RDBMS都不能使用常规索引,因为字符串的开头是未知的。除非你指定像"反向"索引,这在一些RDBMS上是可能的(可以使'%filename'更快),不应该有任何性能差异。

严格说来'%filename' RDBMS必须读取下一个字符以确保它是字符串的结尾,这在'%filename%'的情况下不是必需的,但是这个成本是可以忽略的。

当然是Ans'%filename'和'%filename%'意味着拉胡尔,马克B和三十二上校已经指出的两件不同的事情