首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合索引的第一列是否需要另一个索引?

复合索引的第一列是否需要另一个索引?
EN

Stack Overflow用户
提问于 2021-04-09 09:39:54
回答 2查看 35关注 0票数 1

我们在MySQL中有下面的表。

代码语言:javascript
复制
CREATE TABLE `user_team` (
    `user_id` int(11) NOT NULL,
    `team_id` int(10) unsigned NOT NULL DEFAULT '0',
    PRIMARY KEY (`user_id`,`team_id`),
    KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这里需要KEY user_id (user_id)吗?我记得在某处读到过这样一句话:复合索引的第一列自动具有索引。似乎找不到来源。

EN

回答 2

Stack Overflow用户

发布于 2021-04-09 09:48:38

从MySQL documentation

如果表具有多列索引,则优化器可以使用索引最左侧的任何前缀来查找行。

使用示例索引(user_id, team_id),只对user_id进行查询过滤的查询可以使用此索引,因为B树首先在此字段上建立索引。它随后也按team_id拆分并不重要,因为您只查找与某个或多个user_id值匹配或不匹配的所有记录。

现在,如果您还想支持仅在team_id上过滤的查询,那么您至少需要添加一个其他索引。在这种情况下,您当前的复合索引将不会涵盖这种类型的查询。

票数 2
EN

Stack Overflow用户

发布于 2021-04-09 09:46:24

KEY (user_id)对于主键来说是完全多余的。主键还创建了一个索引。包含多列的复合索引也是每个前导列序列的索引。因此,(a, b, c)上的索引也是(a)(a, b)上的索引。

MySQL文档实际上对多列索引有很好的解释。你可能想看看it

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

https://stackoverflow.com/questions/67013964

复制
相关文章

相似问题

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