首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:可空的列在联合索引中是如何工作的?

MySQL:可空的列在联合索引中是如何工作的?
EN

Stack Overflow用户
提问于 2020-03-18 01:41:05
回答 1查看 27关注 0票数 0

我在MySQL表中有两列,一个是startDay varchar(10),比如"2020-03-23",另一个是orderId archer(20),它们都可以为空

如果我在(orderId,startDay)上创建联合索引

代码语言:javascript
复制
  select * from table where orderId is null and startDay < '2020-03-23'

  select * from table where orderId is not null and startDay < '2020-03-23'

对于上面两个sql语句,我有两个问题: 1)第一个语句是否使用了联合索引中的两个列?由于有数千万行,如果语句没有同时使用两个索引,而只使用了索引的一部分(即第一个),那么性能可能会很低?

2)第二个不能使用联合索引?为什么?

EN

回答 1

Stack Overflow用户

发布于 2020-03-18 01:49:02

第一个可以充分利用索引,因为它只有一个基于范围的条件,也就是索引中的后一个字段。

基本上,它是这样的:

  • orderId IS NULL在索引中查找标识所有IS NULL条目的特定节点,
  • 该节点的子节点按startDay (索引的第二部分)进行有效排序
  • range of startDay nodes,其中startDay < '2020-03-23'很容易标识。

对于第二个查询,orderId IS NOT NULL基本上标识了除标识IS NULL orderId值的节点之外的每个第一层节点。而且MySQL不会在索引方面更进一步。(它在第一个ranged条件下停止)。

而且,第一个查询具有与=条件等效的列,第二个查询具有<>条件,这与拥有一个可空的列并不重要。

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

https://stackoverflow.com/questions/60727541

复制
相关文章

相似问题

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