Mysql
在索引末尾添加主鍵列
如果我有一個具有以下主鍵的表:
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;