如果您的目标是测试MySQL列中是否存在字符串(类型为’varchar’,’text’,’blob’等),那么以下哪一项是更快/更有效/更好地使用,为什么?
或者,还有其他方法可以胜任这些方法吗?
INSTR( columnname, 'mystring' ) > 0
与
columnname LIKE '%mystring%'
正如kibibu在上述评论中指出的,FULLTEXT搜索绝对会更快。
但是 :
mysql> select COUNT(ID) FROM table WHERE INSTR(Name,'search') > 0; +-----------+ | COUNT(ID) | +-----------+ | 40735 | +-----------+ 1 row in set (5.54 sec) mysql> select COUNT(ID) FROM table WHERE Name LIKE '%search%'; +-----------+ | COUNT(ID) | +-----------+ | 40735 | +-----------+ 1 row in set (5.54 sec)
在我的测试中,它们的表现完全相同。它们都不区分大小写,并且通常会执行全表扫描,这在处理高性能MySQL时通常是禁忌。
除非您在索引列上进行前缀搜索:
mysql> select COUNT(ID) FROM table WHERE Name LIKE 'search%'; +-----------+ | COUNT(ID) | +-----------+ | 7 | +-----------+ 1 row in set (3.88 sec)
在这种情况下,仅带有后缀通配符的LIKE要快得多。