MariaDB/MySQL:当存在左联接时,索引提示被忽略



考虑发货和订单表中都有2M条记录。

SELECT DISTINCT
s0_.id         AS id0,
s0_.updated_at AS updated_at1
FROM
`shipment` s0_
LEFT JOIN `order` s1_ ON s0_.order_id = s1_.id -- These line
LEFT JOIN `address` s2_ ON s1_.shipping_address_id = s2_.id -- These line
ORDER BY s0_.updated_at DESC
LIMIT 20 OFFSET 0

如果我删除左边的联接MariaDB将使用指定的索引,为什么?有什么解决办法吗?

此SQL是由库生成的,我修复它的选项有限。

此SQL是由库生成的,我修复它的选项有限。

此SQL是由库生成的,我修复它的选项有限。

此SQL是由库生成的,我修复它的选项有限。

此SQL是由库生成的,我修复它的选项有限。

不要让我把它拿走。我知道它没有用。我认为查询优化器也需要这样想,因为它只是LEFTJOIN。

我正在使用MariaDB 10.1

左边的联接需要在订购输出之前找到装运的order_id

强制索引通常是错误的做法,即使它可以发现一些事情。

使用shipment(order_id, updated_at)的复合索引,就不需要强制使用索引。

ref:复合索引查询优化

最新更新