2016-10-18 3 views
1

私はインデックスに残され、ほとんどの列事項はMySQLのインデックス作成で最も左の列は重要ですか?

私の表は、以下のフィールド

id (int Primary key) 
first_name(varchar(50)) 
last_name varchar(50) 

が含まれていることを知っておく必要があり、私のインデックスがある

Create index ix_name_1 on name(last_name,first_name) 

クエリ

私は次のクエリを実行すると、適切なインデックス

Select * 
from name 
where first_name = 'firstName' and last_name ='lastName' 

または

select * 
from name 
where last_name = 'lastName' and first_name = 'firstName' 

しかし、私は

Select * from name where first_name = 'firstName' 

それはテーブルスキャンに行くを実行しています。

私が見つけたことは、last_nameが最も左の列で、同じテーブルで同じ行こうとしました。

だから私ははい、問題、これを参照んインデックスで最も列を左インデックス

+1

スタート-column-indexes.html。 –

+0

...正確な見積もりは:「列のインデックスの一番左の接頭辞を形成しない場合、MySQLはインデックスを使用してルックアップを実行できません。 – raina77ow

+0

自分でインデックスを作成してみてください。 'last_name、first_name'の順番に全員の名前がリストされている大きな本を作ってください。次に、すべての人物を 'last_name'" smith "で検索してみましょう。すべてが同じページに連続して表示されるので簡単です。今度は 'first_name'" john "で誰も検索してみてください。この本は貴重なものではありません。書籍の始めに" adams、john "終わりには "zorn、john"、それ以外の任意の数の "john"があります。 –

答えて

1

における左端の列事項を知っておく必要があります。

http://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html 

それはと言われて:

名前索引は、last_name列とfirst_name列の索引です。 インデックスは、last_nameとfirst_nameの値の組み合わせについて、既知の範囲 の値を指定するクエリのルックアップに使用できます。また、 というlast_name値を指定するクエリの場合は、 を使用することもできます(このセクションの後半の を参照)。そのため、名前のインデックスは次のクエリで検索 のために使用されます。http://dev.mysql.com/doc/refman/5.7/en/multiple:対象のドキュメントと...

+0

しかし、私は名前から選択*をしようとしていますwhere last_name = 'lastName'それはどのように動作しますか? – Shree

+0

* from last name = 'lastName' \t \t \t \t \tここで、where句には単一の列も含まれますが、インデックスはどのように使用されますか? – Shree

+0

私は間違いをしたと思う。私はあなたがテーブルを参照すると思った最も左の列を左に言う。 これを参照してください:http://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html 複合インデックスは、左端のクエリにも使用されます索引のフィールド。私は私の答えを変えます。 – Bambang

関連する問題