mysql - 如何使用 LIKE 提高查询中的索引使用率

标签 mysql sql-like

CREATE TABLE test (
    id         INT NOT NULL,
    last_name  CHAR(30) NOT NULL,
    first_name CHAR(30) NOT NULL,
    PRIMARY KEY (id),
    KEY `first_name` (first_name),
    KEY `last_name` (last_name),
    KEY `last_first` (last_name,first_name)
);

如果我有这样的查询,如果我有这样的表索引,这很好吗:

SELECT * FROM test WHERE first_name = 'A';
SELECT * FROM test WHERE last_name= 'A';
SELECT * FROM test WHERE first_name like '%A%';
SELECT * FROM test WHERE last_name like '%A%';
SELECT * FROM test WHERE last_name= 'A' AND first_name = 'A';
SELECT * FROM test WHERE last_name like '%A%' AND first_name  like '%A%';
SELECT * FROM test WHERE last_name= 'A' OR first_name = 'A';
SELECT * FROM test WHERE last_name like '%A%' first_name  OR like '%A%';

更新错误的查询。

最佳答案

SELECT * FROM test WHERE first_name = 'A';

first_name 上的索引会有所帮助

SELECT * FROM test WHERE last_name= 'A';

last_name 上的索引会有所帮助

SELECT * FROM test WHERE first_name like '%A%';
SELECT * FROM test WHERE last_name like '%A%';

没有索引会有所帮助,您只能针对“A%”或带有反向值列的“%A”进行优化。

SELECT * FROM test WHERE last_name= 'A' AND first_name = 'A';

关于姓氏、名字或名字、姓氏的索引会有所帮助,但可能其中一个就足够了

SELECT * FROM test WHERE like '%A%' AND like '%A%';
SELECT * FROM test WHERE like '%A%' OR like '%A%';

不是有效的查询

SELECT * FROM test WHERE last_name= 'A' OR first_name = 'A';

姓氏或名字的索引会有所帮助,但表扫描的机会很大

关于mysql - 如何使用 LIKE 提高查询中的索引使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25881250/

相关文章:

mysql语句不会插入

mysql - WordPress 数据库脚本名称

mysql - 在整个Mysql表(所有字段)中搜索特定字符串

mysql - 在非常小的列上进行全文搜索

php - 简化mysql过滤查询

SQL 不区分大小写的 IN 搜索

mysql - 左连接逻辑不符合预期

MYSQL:连接到 localhost 和 host.docker.internal

mysql - 像 MySQL 中的大小写敏感一样

mysql - mysql 内连接表上的左连接