[MySQL]innoDBエンジンのプライマリ・キーとクラスタ・インデックス

1204 ワード

mysqlのinnodbエンジン自体が格納する形式は、クラスタインデックスの形式でなければなりません.ディスクにツリー状に格納されていますが、必ずしもプライマリ・キーに基づいてクラスタ化されているわけではありません.3つの状況があります.
1.プライマリ・キーがある場合、プライマリ・キーはクラスタ・インデックスです.
2.プライマリ・キーがない場合、最初の空でないnullの唯一のインデックスはクラスタ・インデックスです.
3.上にない場合は、クラスタインデックスとして隠しrow-idがあります.
 
ほとんどの場合、テーブルを作成するときにプライマリ・キーが作成されるため、ほとんどはプライマリ・キーに基づいてクラスタ化されます.
プライマリ・キー・フィールドに基づいてクエリーを行う場合、効率が最も高く、二次検索を必要とせず、直接プライマリ・キー・フィールドでインデックス・ツリーをクエリーします.リーフ・ノードは格納されたデータです.
 
プライマリ・キーに基づいてクエリーを行う場合、唯一の場合、実行計画は次のようになり、差が少なく最も効率的です.typeはconst rowで1行だけスキャンする必要があります
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | tblz  | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+