私はこのテーブル作成:この複合キーがインデックスに登録されないのはなぜですか?
CREATE TABLE incident_originator (
id_incident INT (11) UNSIGNED NOT NULL,
id_user INT (11) NOT NULL,
PRIMARY KEY (
id_incident,
id_user
),
CONSTRAINT fk_incident_incident_originator FOREIGN KEY (id_incident) REFERENCES incident_table (id_incident) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT fk_user_incident_originator FOREIGN KEY (id_user) REFERENCES users (id_user) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE = INNODB DEFAULT CHARSET = latin1;
しかし、fk_user_incident_originator
は、インデックス化され、そしてfk_incident_incident_originator
ではありません。何故ですか? InnoBDは自動的にすべての外部キーのインデックスを作成するはずですか? id_incident
のインデックスがないと、結合が遅くなるでしょうか?私が読んだほど、わかりません...
また、テーブルに値を追加すると、それらは2番目の列で順序付けされ、人間として読むには変です。
編集:私はSHOW INDEX FROM incident_originator;
を行うと、それは、これを返します。
Non_unique Key_name Seq_in_index Column_name
0 PRIMARY 1 id_incident
0 PRIMARY 2 id_user
1 fk_user_incident_originator 1 id_user
'show index 'の結果を質問に追加しました。あなたが言うように、' fk_incident_incident_originator'が索引付けされていないからです。それは 'SHOW INDEX'の結果に表示されるべきではありませんか? について >選択したインデックスからインデックス順に行が読み込まれ、その順序が完全に偶然の結果の順序になります。 PRIMARYキーおよびSeq_in_index値のインデックス順は、最初にid_incidentで列を順序付けする必要があることを示していますか? とにかく、私は 'SELECT *'を使用しないでも、クエリの結果を順序付けしなくても、注文のことはもっと好奇心です。 – Tyrannogina
なぜ 'SHOW INDEX'が混乱しているのかは、' fk_user_incident_originator'があなたが何を意味するのかを意味しないからです。これはインデックス名であり、偶然には制約記号と同じです。最初にuser_idにインデックスを追加した後、この外部キーを追加した場合、それは 'SHOW INDEX'にも表示されません。 –