关于stackoverflow,已经有许多问题得到了回答,这些问题讨论了sql如何选择索引,方法是使用表上的各种统计信息,并估计每个索引的帮助程度。我希望有人能提出一个更具体的问题,让我明白这一点在我的情况下是如何适用的。
查询内容如下:
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.id
以及 TableB.customer_id
. mysql数据库一直选择在上使用索引 TableB.customer_id
. 这会导致查询运行缓慢,而如果我强制它在 TableB.id
,速度很快。 TableA
以及 TableB
两者都有100000-1000000行,其中许多行都匹配。 TableB.customer_id
几乎都是空的。
mysql选择索引的具体原因是什么 customer_id
在这种情况下?
有什么关于 is NULL
条款vs = TableA.id
使它认为这会更有用的条款?
我本以为它会选择 id
因为这是要与另一个表进行比较的列,并且需要特定值的是该列,而不仅仅是null和notnull。
1条答案
按热度按时间mwg9r5ms1#
上的索引
TableB.id
与…无关取而代之的是这个综合指数: