264

インデックスを明示的に作成する必要がありますか、それとも主キーを定義するときに暗黙的ですか? MyISAM と InnoDB の答えは同じですか?

4

9 に答える 9

313

主キーは常に索引付けされます。これは MyISAM と InnoDB で同じであり、インデックスをサポートするすべてのストレージ エンジンに一般的に当てはまります。

于 2009-07-01T20:24:32.530 に答える
32

http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.htmlによると、これは暗黙的であるように見えます

于 2009-07-01T20:25:27.503 に答える
17

これは 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 テーブルもハッシュ インデックスをサポートすることです。

于 2012-12-20T19:28:30.583 に答える
11

主キーは、MyISAM と InnoDB の両方で暗黙的にインデックス化されます。これは、主キーを使用するクエリで EXPLAIN を使用することで確認できます。

于 2009-07-01T20:25:05.227 に答える
9

これが答えだと思います

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)
于 2015-08-28T07:37:12.500 に答える
9

主キーのインデックスを明示的に作成する必要はありません...デフォルトで作成されます。

于 2009-07-01T20:24:49.377 に答える
1

はい、主キー列は、主キーの制約を伴う他のインデックス付き列と考えることができます。

ほとんどのユースケースでは、テーブル内の主キーとインデックス付きの列の両方が必要です。これは、テーブルへのクエリが、主キーではない列に基づいて行をフィルタリングする可能性があるためです。その場合、通常、それらの列にインデックスを付けます。同じように。

于 2020-05-08T07:06:50.397 に答える