小编典典

哪个更快-INSTR还是LIKE?

mysql

如果您的目标是测试MySQL列中是否存在字符串(类型为’varchar’,’text’,’blob’等),那么以下哪一项是更快/更有效/更好地使用,为什么?

或者,还有其他方法可以胜任这些方法吗?

INSTR( columnname, 'mystring' ) > 0

columnname LIKE '%mystring%'

阅读 530

收藏
2020-05-17

共1个答案

小编典典

正如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要快得多。

2020-05-17