Nuno Asked: 2017-12-04 06:58:56 +0800 CST2017-12-04 06:58:56 +0800 CST 2017-12-04 06:58:56 +0800 CST 在索引末尾添加主键列 772 如果我有一个包含以下主键的表: PRIMARY KEY (id) 我想查询某人写的文档(例如显示最新 20 个的预览),按他们的“id”排序,所以我创建了一个索引: INDEX from_id (from, id) 该索引末尾的“id”是否多余,因为它以主键结尾? 如果是,为什么? mysql index 1 个回答 Voted Best Answer Rick James 2017-12-04T09:17:59+08:002017-12-04T09:17:59+08:00 在 InnoDB中,每个“二级”索引(即除“PRIMARY”之外的索引)都会自动添加 PK 的列。 这些是“相同的”: PRIMARY KEY(id), INDEX(from, id) PRIMARY KEY(id), INDEX(from) 你甚至可以做 PRIMARY KEY(from, id), INDEX(id) id这个组合在 是 的时候是有益的AUTO_INCREMENT,但你经常在 上做一个范围from。现在这些行被“聚集”在一起,从而更有效地获取。同时,INDEX(id)保持AUTO_INCREMENT快乐——因为它需要知道它在哪里停止。 我假设你正在做: SELECT ... WHERE `from` = '...' ORDER BY id DESC LIMIT 20;
在 InnoDB中,每个“二级”索引(即除“PRIMARY”之外的索引)都会自动添加 PK 的列。
这些是“相同的”:
你甚至可以做
id
这个组合在 是 的时候是有益的AUTO_INCREMENT
,但你经常在 上做一个范围from
。现在这些行被“聚集”在一起,从而更有效地获取。同时,INDEX(id)
保持AUTO_INCREMENT
快乐——因为它需要知道它在哪里停止。我假设你正在做: