这个问题与此有关 Do MySQL tables need an ID?
有一个无意义的auto_incremental ID作为表的PRIMARY KEY,那么当我创建其他KEY时,我应该在KEYs中包含这个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中哪一个更好?
答案 0 :(得分:5)
对于InnoDB,the primary key is always included in secondary indexes;
聚簇索引以外的所有索引都称为辅助索引。在InnoDB中,辅助索引中的每条记录都包含行的主键列,以及为辅助索引指定的列。 InnoDB使用此主键值来搜索聚簇索引中的行。
换句话说,ID
已经包含zip1
,并且不必像zip2
中那样提及。