我是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 KEY
和UNIQUE KEY
会自动编入索引。那么,在我的情况下id
索引来了吗?不要把它作为最左边的前缀。
select * from test
where id=xxx and last_name==xxxx
这会要求查找还是搜索整个数据库?
答案 0 :(得分:2)
首先,您的查询是多余的。 id
比较就足够了。
优化器将识别出两个索引可用于查询。我很确定MySQL会选择主键索引,因为它是唯一的和集群的。因此,这显然是正确的。
如果索引既不是唯一的也不是主键,那么MySQL将使用有关索引的统计信息(或任意选择其中一个)。您可以在documentation。
中阅读有关索引统计信息的信息