mariadb/mysql:存在左连接时忽略索引提示

ryoqjall  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(397)

假设发货和订单表中都有200万条记录。

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是由库生成的,我只有有限的选项来修复它。
别让我把它拿走。我知道这没用。我认为查询优化器也需要这样考虑,因为它只是左连接。
我正在使用mariadb 10.1

20jt8wwn

20jt8wwn1#

左连接需要找到 order_id 在订购产品之前。
强制索引通常是错误的,即使它可以发现一些东西。
使用复合索引 shipment(order_id, updated_at) 不需要强制索引。
参考:复合指数优化

相关问题