普通密钥是否应包含主密钥?

时间:2014-02-24 18:31:06

标签: mysql indexing innodb

这个问题与此有关 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中哪一个更好?

1 个答案:

答案 0 :(得分:5)

对于InnoDB,the primary key is always included in secondary indexes;

  

聚簇索引以外的所有索引都称为辅助索引。在InnoDB中,辅助索引中的每条记录都包含行的主键列,以及为辅助索引指定的列。 InnoDB使用此主键值来搜索聚簇索引中的行。

换句话说,ID已经包含zip1,并且不必像zip2中那样提及。