2017-06-05 11 views
0

私はSQLを初めて使い、MySQLを使って作業しています。 私は、インデックスの概念によってつもりだと私は次のような場合に何が起こるかわからない:私は、last_nameまたは(last_name,first_name)first_nameができない場合として、ルックアップに使用することができ、ここで読んだことが複数列インデックスの主キーの優先順位?

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) 
); 

直接検索に使用されます(一番左のインデックスではありません)。

また、PRIMARY KEYUNIQUE KEYは自動的に索引付けされています。ですから、私の場合、idのインデックスはどこにありますか?一番左の接頭辞として来ないでください。

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

これは、データベース全体を検索するか検索しますか?

+0

idフィールドはプライマリキーの唯一のフィールドなので、そのインデックスの一番左のフィールドです... – Shadow

答えて

2

まず、クエリは冗長です。 idの比較で十分です。

オプティマイザは、クエリに2つのインデックスを使用できることを認識します。私はかなりユニークでクラスタ化されているので、MySQLが主キーインデックスを選択することを確信しています。したがって、明らかに正しいものです。

どちらのインデックスも一意のキーでもプライマリキーでもない場合、MySQLはインデックスに関する統計情報を使用します(または任意に1つを選択します)。 documentationでインデックス統計情報を読むことができます。

関連する問題