这些MySQL索引是否重复?

时间:2015-09-30 15:18:06

标签: mysql indexing

我对这个表的最佳索引选项感到有点困惑。我想要搜索和加入ServiceID和TagID。我还需要确保两者结合是独一无二的。

CREATE TABLE IF NOT EXISTS `service-tag` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ServiceID` int(10) unsigned NOT NULL,
  `TagID` int(10) unsigned NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `ServiceID` (`ServiceID`,`TagID`),
  KEY `TagID` (`TagID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=39 ;

是否需要在TagID上添加第二个索引,还是自动从UNIQUE索引中的第二列开始正确索引?

1 个答案:

答案 0 :(得分:1)

如果你有一个多列索引(作为ServiceID索引IS),那么当你只搜索TagID时,MySQL就无法使用该索引。在非专业语言中,当您只需要ServiceID时,MySQL无法使用TagID“覆盖”到索引中。

因此,如果你只计划在语句中使用TagID而不是想要保留该索引。

如果您从未计划仅查询TagID,并且所有查询都将同时使用ServiceIDTagID,那么是,TagID - 唯一索引是不需要。

手册中记录了此行为:

https://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

  

如果表具有多列索引,则优化程序可以使用索引的任何最左前缀来查找行。例如,如果在(col1,col2,col3)上有三列索引,则在(col1),(col1,col2)和(col1,col2,col3)上建立索引搜索功能。

     

如果列不形成索引的最左前缀,则MySQL无法使用索引执行查找。