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

Mysql 多列索引中主键的优先级?,mysql,sql,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\u name或(last\u name,first\u

我是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\u name
(last\u name,first\u name)
可用于查找,其中as
first\u name
不能直接用于查找(不是最左边的索引)

我还读到,
主键
唯一键
是自动索引的。那么,在我的例子中,
id
索引来自哪里?不要用最左边的前缀

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

这是否需要查找或搜索整个数据库?

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

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


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

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

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


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

id字段是主键中唯一的字段,因此它是该索引中最左侧的字段…id字段是主键中唯一的字段,因此它是该索引中最左侧的字段。。。