2017-02-07 19 views
1

私はいくつかのQを完了しました& AMySQLインデックス:コンポジット対カラム

How does database indexing work?

Mysql covering vs composite vs column index

これらの読み取りに優れている、しかし、私はインデックスすなわち、約いくつかのより多くの質問を得ました。テーブルと実行計画を下回ると仮定 :

CREATE TABLE student(`id` INT(9), 
          `name` VARCHAR(50), 
          `rollNum` INT(9), 
          `address` VARCHAR(50), 
          `deleted` int(2) default 0, 
          Key `name_address_key`(`name`,`deleted`), 
          Key `name_key`(`name`) 
          ); 

計画1:explain select * from student where name = "abc" and deleted =0;

そのショーキー= name_address_key

計画2:explain select * from student where name = "abc"

それも示している同じキー= name_address_key

私の質問は: Ho w MySQlは実行計画のインデックスを決定しますか?

答えて

1

nameの列は接頭辞がname_address_keyなので、nameだけでなく、name_keyと一致させるために使用することができます。 1つを他のものよりも優先させる理由はありませんが、カーディナリティがname_address_keyとおそらく高いので、そのカーディナリティを選択します。

name_address_keyで冗長であり、スペースを無駄にしているので、name_keyを持つことに意味はありません。

1

インデックスのサイズが小さいので、name_keyを選ぶと予想されます。

@Barmarの説明のように、name_keyを本質的に役に立たないものとして削除することをお勧めします。

くれないフラグ(deleted)のための4バイトのintを行い、TINYINTおよび他の小さいデータ型を参照してください。

PRIMARY KEYを持っていますか?

別の良い読書(私の偏った意見で):Indexing Cookbook

+0

おかげで料理本。 – Suraj

関連する問題