如果我执行这个查询:
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/