我創造了這個表:爲什麼這個組合鍵沒有索引?
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
中的索引會使連接速度變慢,對嗎?我讀得越多,理解得越少...
另外,當我向表中添加值時,它們按第二列排序,它變得奇怪,以讀爲人。
編輯:當我做了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'中顯示出來。 –