2017-06-05 14 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中的索引統計信息。