以下两个查询之间是否有任何性能优势:
SELECT path FROM path WHERE name LIKE '%filename'
或 -
SELECT path FROM path WHERE name LIKE '%filename%'
MySQL执行会有什么不同?除了语法正确性之外,使用%term
优于%term%
会有什么好处吗?
答案 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和三十二上校已经指出的两件不同的事情