首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我同时使用where和order时,应该使用复合索引吗?

问当我同时使用where和order时,应该使用复合索引吗?
EN

Stack Overflow用户
提问于 2021-08-11 22:49:37
回答 2查看 39关注 0票数 0

我正在使用MySQL 8。

我的问题是:

代码语言:javascript
复制
SELECT * FROM users WHERE status = 1 ORDER BY id

相关的列和索引状态是:

  • id:主键(Indexed)
  • status:索引

我的问题是:

id和status都有索引。我还需要一个单独的复合索引(状态,id)吗?

EN

回答 2

Stack Overflow用户

发布于 2021-08-11 22:55:29

每个SELECT只能使用一个索引。因此,当不同的列都包含在一个SELECT中时,在不同的列上使用不同的索引不会有多大帮助。

在您的情况下,您可能希望在users (status, id)上尝试一个索引。使用EXPLAIN检查它是否被捡起来。

票数 0
EN

Stack Overflow用户

发布于 2021-08-11 23:48:16

如果您使用的是InnoDB,那么status上的辅助索引将隐式地附加主键。就好像您在(status, id)上有一个索引一样。

因此,您将选择具有给定值status=1的行,然后InnoDB将按索引顺序读取这些行,这意味着它们将由id按顺序返回。由于这与ORDER BY子句匹配,优化器知道它可以跳过对结果排序的任何工作。

您可以使用EXPLAIN来确认这一点。您要寻找的是,在EXPLAIN报告的额外字段中没有“使用文件”。

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

https://stackoverflow.com/questions/68749743

复制
相关文章

相似问题

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