Mysql

在索引末尾添加主鍵列

  • December 3, 2017

如果我有一個具有以下主鍵的表:

PRIMARY KEY (id)

我想查詢某人寫的文件(例如顯示最新20個的預覽),按他們的“id”排序,所以我創建了一個索引:

INDEX from_id (from, id)

這個索引末尾的“id”是否多餘,因為它以主鍵結尾?

如果是,為什麼?

在 InnoDB中,每個“輔助”索引(即“PRIMARY”以外的索引)都會自動添加 PK 的列。

這些是“相同的”:

PRIMARY KEY(id),  INDEX(from, id)
PRIMARY KEY(id),  INDEX(from)

甚至可以

PRIMARY KEY(from, id),  INDEX(id)

這個組合在 is 時id很有AUTO_INCREMENT用,但你經常在範圍內做from。現在這些行被“聚集”在一起,從而更有效地獲取。同時,INDEX(id)保持AUTO_INCREMENT快樂——因為它需要知道它停止的地方。

我假設你正在做:

SELECT ...
   WHERE `from` = '...'
   ORDER BY id DESC
   LIMIT 20;

引用自:https://dba.stackexchange.com/questions/192278