【发布时间】:2011-08-10 19:03:35
【问题描述】:
如果我有下表:
CREATE TABLE `mytable` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(64) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name_first_letter` (`name`(1)),
KEY `name_all` (`name`)
)
MySQL 会选择使用name_first_letter 索引而不是name_all 索引吗?如果是这样,在什么条件下会发生这种情况?
我已经做了一些快速测试,但我不确定 MySQL 是否会在使用索引提示时选择 name_first_letter 索引:
-- This uses name_all
EXPLAIN SELECT name FROM mytable
WHERE SUBSTRING(name FROM 1 FOR 1) = 'T';
-- This uses no index at all
EXPLAIN SELECT name FROM mytable USE INDEX (name_first_letter)
WHERE SUBSTRING(name FROM 1 FOR 1) = 'T';
任何 MySQL 专家都可以对此有所了解吗?在这个专栏中有name_first_letter 有什么意义吗?
编辑:问题标题不太正确。
【问题讨论】: