对于这个表的最佳索引选项,我有点困惑。我想在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上添加第二个索引是必要的吗?还是仅仅因为它是唯一索引中的第二列就自动得到索引呢?
发布于 2015-09-30 15:21:22
如果您有一个多列索引(如ServiceID索引),那么当您只在TagID上搜索时,MySQL就不能使用该索引。在MySQL语言中,当您只需要TagID时,TagID无法使用TagID“到达”索引w/o。
因此,如果计划只在语句中使用TagID,则需要保留该索引。
如果您从未计划只查询TagID,并且所有查询都将同时使用ServiceID和TagID,那么是的,不需要TagID-only索引。
手册中记录了这种行为:
https://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html
如果表有多列索引,则优化器可以使用索引的任何最左前缀来查找行。例如,如果您有一个三列索引on (col1,col2,col3),那么您已经在(col1)、(col1、col2)和(col1、col2、col3)上建立了索引搜索功能。 如果列没有形成索引的最左边前缀,则MySQL无法使用索引执行查找。
https://stackoverflow.com/questions/32869818
复制相似问题