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/