首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MySQL总是选择"is NULL“列索引而不是"JOIN”列索引?

为什么MySQL总是选择"is NULL“列索引而不是"JOIN”列索引?
EN

Stack Overflow用户
提问于 2018-09-06 04:49:10
回答 1查看 54关注 0票数 0

在stackoverflow上已经回答了许多问题,这些问题讨论了SQL如何通过使用表上的各种统计数据来选择索引,并估计每个索引将有多大帮助。我希望通过一个更具体的问题,有人能够确切地阐明这是如何适用于我的情况的。

该查询如下所示:

代码语言:javascript
复制
SELECT *
FROM TableA
LEFT JOIN TableB
  on TableB.data_id = TableA.data_id
  and TableB.customer_id is NULL
WHERE TableB.id is NULL

TableB.idTableB.customer_id上有一个索引。MySQL数据库一直选择使用TableB.customer_id上的索引。这会导致查询运行慢得令人痛苦,而如果我强制它在TableB.id上使用索引,它就会很快。

TableATableB都有100,000 - 1,000,000行,其中许多行都是匹配的。TableB.customer_id几乎都是空的。

在这种情况下,MySQL选择customer_id上的索引是否有特定的原因?

is NULL子句和= TableA.id子句有没有什么让它觉得这样更有用的地方呢?

我本以为它会选择id上的索引,因为这是与另一个表进行比较的列,并且该列需要一个特定值,而不仅仅是NULL和NOT NULL。

EN

回答 1

Stack Overflow用户

发布于 2018-09-21 04:29:20

TableB.id上的索引与

代码语言:javascript
复制
 on TableB.data_id = TableA.data_id
and TableB.customer_id is NULL

取而代之的是这个综合指数:

代码语言:javascript
复制
INDEX(data_id, customer_id)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52193196

复制
相关文章

相似问题

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