明示的にインデックスを作成する必要がありますか、それとも主キーを定義するときに暗黙的に作成されますか? MyISAMとInnoDBの答えは同じですか?
主キーには常にインデックスが付けられます。これは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
テーブルのprimary keyは、最も重要なクエリで使用する列または列のセットを表します。 クエリのパフォーマンスを高速化するために、関連付けられたインデックスがあります
MySQL 5.0のリファレンスについては、以下を参照してください: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
ほとんどのMySQLindexes(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)
インデックスは、where句で頻繁に使用される列や、 "order by"などのあらゆる種類の並べ替えで使用するのが最適です。より複雑なデータベースで作業している可能性があるため、いくつかの単純なルールを覚えておくことをお勧めします。
インデックスはwhere句と順序付けを高速化します。テーブルを構築するときに、データがどのように使用されるかについて考えることを忘れないでください。他にも覚えておくべきことがいくつかあります。テーブルが非常に小さい場合、つまり数人の従業員しかいない場合、インデックスを使用してテーブルスキャンを実行するよりも、インデックスを使用する方が悪いでしょう。
インデックスは、多くの行があるテーブルでのみ有効です。
覚えておくべきもう1つのことは、従業員のデータベースの状況における短所ですが、列が可変長の場合、インデックス(およびほとんどのMySQL)のパフォーマンスが大幅に低下することです。
参加も忘れないでください!インデックス付き結合フィールドは速度を上げます。
主キーは常に自動的にインデックス付けされ、一意です。したがって、冗長なインデックスを作成しないように注意してください。
たとえば、テーブルを次のように作成した場合
CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;
主キーにインデックスを作成し、一意性制約を適用するため、実際にはfoo
!に3つのインデックスを作成することになります。