1
这个问题是关系到 Do MySQL tables need an ID?正常密钥应包含主键吗?
有一种毫无意义的auto_incremental ID作为主键的表,然后当我创建其它键,我应该包括在此键ID?
例如,在该表:
CREATE TABLE `location` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(50),
`states` varchar(50),
`city` varchar(50),
`county` varchar(50),
`zip` int(5),
PRIMARY KEY(ID),
KEY zip1 (zip),
KEY zip2 (zip, ID)
} ENGINE=InnoDB ;
因为我需要使用邮政编码很多搜索的表,所以我需要邮编一键启动。我应该使用KEY zip1或KEY zip2。这两个KEY中的哪一个更好?
谢谢。官方文件非常有帮助。 –
这是真的。我可以补充一点,虽然InnoDB *中的每个辅助键*都包含聚簇键(本例中为“id”),但MySQL本身并不知道这一点。在某些情况下,包括聚集键列(或其子集)将改进优化器的决策制定。例如,如果你有'SELECT id FROM t WHERE a = 5 ORDER BY id DESC',你可以通过在'(a,id)'上建立索引来避免额外的排序。此外,在索引定义中包含集群键不会占用额外的空间,因为列数据已经存在。 – jeremycole