多列索引中主键的优先级?

时间:2017-06-05 10:43:37

标签: mysql sql

我是sql的新手,现在正在使用MySQL。 我正在阅读索引的概念,我不确定在下列情况下会发生什么:

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

我已在此处读到,last_name(last_name,first_name)可用于查找,因为first_name不能直接用于查找(不是最左边的索引)。

我还读到PRIMARY KEYUNIQUE KEY会自动编入索引。那么,在我的情况下id索引来了吗?不要把它作为最左边的前缀。

select * from test
where id=xxx and last_name==xxxx

这会要求查找还是搜索整个数据库?

1 个答案:

答案 0 :(得分:2)

首先,您的查询是多余的。 id比较就足够了。

优化器将识别出两个索引可用于查询。我很确定MySQL会选择主键索引,因为它是唯一的和集群的。因此,这显然是正确的。

如果索引既不是唯一的也不是主键,那么MySQL将使用有关索引的统计信息(或任意选择其中一个)。您可以在documentation

中阅读有关索引统计信息的信息