mysql - 性能 LIKE 包括通配符 (%)

标签 mysql performance wildcard sql-like

如果我执行这个查询:

SELECT * FROM table1 WHERE name LIKE '%girl%'

它返回名称包含“girl”的所有记录。但是,由于 LIKE 语句中的第一个通配符 %,它不能(或不)使用此处所述的索引:Mysql Improve Search Performance with wildcards (%%)

然后我将查询更改为:

SELECT * FROM table1 WHERE name LIKE 'girl%' OR name LIKE '%girl%'

OR 的左侧,我删除了通配符以便它可以使用索引。但性能获胜取决于 MySQL 如何评估查询。

因此我的问题是:当我添加 OR 语句时,我的查询性能会提高吗?

最佳答案

不,性能是一样的。由于 OR,MySQL 仍然必须评估第一个条件 (LIKE '%girl%')。然后它可以使用索引评估第二个条件。您可以在 EXPLAIN 时看到此信息您的查询(mysql 将显示它仍然需要进行全表扫描,这意味着检查每一行):

EXPLAIN SELECT * FROM table1 WHERE name LIKE 'girl%' OR name LIKE '%girl%'

为了更好地处理这些类型的查询,您需要使用 Fulltext indexes以及查询它们的特殊语法。但是 FT 索引表现不同,并不适合所有情况。

关于mysql - 性能 LIKE 包括通配符 (%),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402380/

相关文章:

mysql - 两次连接两个表,每次选择不同的行

mysql - 使用 MySQL 的多个/分布式 hibernate SessionFactory 实例的问题

php - 我们怎样才能避免mysql数据库中的重复值

MySQL 通配符替换

java - 使给定的 Java 类更加通用和灵活

java - 带有通配符输入的 unix 'ls' 命令 - 相当于 java 6

mysql - 使用非唯一 ID 进行排序和计数

performance - Matlab:数组在循环内增长 - 那又怎样?

java - 优化代码以找到给定数字 N 的阶乘的个位数

C - 数组函数求值