Karp 的技术博客

1. LIKE 查询的效率

在 MySQL 中,LIKE 操作符用于进行模糊查询。查询效率取决于多个因素,包括:

  • 通配符的位置:使用 % 通配符时,位置会影响查询效率。

    • %abc%abc%:在开头或中间使用 % 会导致全表扫描,效率较低。
    • abc%:在结尾使用 % 通常更高效,因为 MySQL 可以使用索引。
  • 索引的使用:如果列上有索引,且 LIKE 查询可以利用该索引,性能会更好。

2. 模糊查询示例

SELECT * FROM users WHERE name LIKE '%john%';  -- 效率低
SELECT * FROM users WHERE name LIKE 'john%';   -- 效率高
SQL

3. 提升模糊查询效率的方法

3.1 使用全文索引

对于需要进行复杂模糊匹配的情况,可以考虑使用 MySQL 的全文索引(Full-Text Search)。它适用于 CHARVARCHARTEXT 类型的列。

创建全文索引

ALTER TABLE users ADD FULLTEXT(name);
SQL

使用 MATCHAGAINST

SELECT * FROM users WHERE MATCH(name) AGAINST('john' IN NATURAL LANGUAGE MODE);
SQL

3.2 使用前缀索引

如果查询模式允许,将索引设置为前缀索引,尤其是对于长文本字段。

CREATE INDEX idx_name_prefix ON users(name(10));  -- 使用前10个字符作为索引
SQL

3.3 控制数据量

对于大表,考虑使用分区或限制返回结果集的数量。

SELECT * FROM users WHERE name LIKE 'john%' LIMIT 100;
SQL

3.4 替换 LIKE 查询

如果查询是针对特定模式的,可以使用其他方法,例如使用正则表达式。

SELECT * FROM users WHERE name REGEXP '^john';  -- 匹配以 "john" 开头的记录
SQL

4. 示例和测试

示例表

假设有一个 users 表:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100)
);
SQL

性能测试

使用 EXPLAIN 关键字查看查询计划,分析 LIKE 查询的性能:

EXPLAIN SELECT * FROM users WHERE name LIKE '%john%';
SQL

5. 总结

  • 使用 LIKE 时,放置 % 的位置会显著影响查询效率。
  • 对于复杂的模糊查询,可以考虑使用全文索引或其他优化手段。
  • 定期检查查询性能,使用 EXPLAIN 分析查询计划,以便做出相应的优化。

mysql

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年10月21日 03:39
0

目录

来自 《 MySQL 模糊查询 `LIKE` 效率及优化方法》