首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这些MySQL索引是重复的吗?

这些MySQL索引是重复的吗?
EN

Stack Overflow用户
提问于 2015-09-30 15:18:05
回答 1查看 25关注 0票数 0

对于这个表的最佳索引选项,我有点困惑。我想在ServiceID和TagID上进行搜索和加入。我还需要确保这两个组合是独特的。

代码语言:javascript
复制
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上添加第二个索引是必要的吗?还是仅仅因为它是唯一索引中的第二列就自动得到索引呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 15:21:22

如果您有一个多列索引(如ServiceID索引),那么当您只在TagID上搜索时,MySQL就不能使用该索引。在MySQL语言中,当您只需要TagID时,TagID无法使用TagID“到达”索引w/o。

因此,如果计划只在语句中使用TagID,则需要保留该索引。

如果您从未计划只查询TagID,并且所有查询都将同时使用ServiceIDTagID,那么是的,不需要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无法使用索引执行查找。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32869818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档