インデックスを明示的に作成する必要がありますか、それとも主キーを定義するときに暗黙的ですか? MyISAM と InnoDB の答えは同じですか?
9 に答える
主キーは常に索引付けされます。これは MyISAM と InnoDB で同じであり、インデックスをサポートするすべてのストレージ エンジンに一般的に当てはまります。
http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.htmlによると、これは暗黙的であるように見えます
これは 2009 年に尋ねられましたが、主キーに関する MySQL のドキュメントへの実際の参照を投稿すると思いました。 http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
テーブルの主キーは、最も重要なクエリで使用する列または列のセットを表します。高速なクエリ パフォーマンスのために、関連付けられたインデックスがあります。
MySQL 5.0 リファレンスについては、http: //dev.mysql.com/doc/refman/5.0/en/mysql-indexes.htmlを参照してください。
ほとんどの MySQLインデックス( PRIMARY KEY、 UNIQUE、INDEX、および FULLTEXT) は B ツリーに格納されます。例外は、空間データ型のインデックスが R ツリーを使用することと、MEMORY テーブルもハッシュ インデックスをサポートすることです。
主キーは、MyISAM と InnoDB の両方で暗黙的にインデックス化されます。これは、主キーを使用するクエリで EXPLAIN を使用することで確認できます。
これが答えだと思います
mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)
mysql> show indexes from test \G
*************************** 1. row ***************************
Table: test
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
主キーのインデックスを明示的に作成する必要はありません...デフォルトで作成されます。
はい、主キー列は、主キーの制約を伴う他のインデックス付き列と考えることができます。
ほとんどのユースケースでは、テーブル内の主キーとインデックス付きの列の両方が必要です。これは、テーブルへのクエリが、主キーではない列に基づいて行をフィルタリングする可能性があるためです。その場合、通常、それらの列にインデックスを付けます。同じように。