2017-06-05 157 views
0

我是新来的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 

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

+0

id字段是主键中唯一的字段,所以它是该索引中最左边的字段... – Shadow

回答

2

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

优化器将认识到可以使用两个索引进行查询。我很确定MySQL会选择主键索引,因为它是唯一的并且是集群化的。因此,它显然是正确的。

如果这两个索引都不唯一或是主键,那么MySQL将会对索引进行统计(或者任意选择其中的一个)。您可以阅读有关documentation中的索引统计信息。