考虑发货表和订单表中都有 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 是由库生成的,我修复它的选项有限。
不要要求我删除它。我知道它没有用。我认为查询优化器也需要这样考虑,因为它只是LEFT JOIN。
我使用的是 MariaDB 10.1
最佳答案
左连接在订购输出之前需要找到发货的order_id
。
强制索引通常是错误的做法,即使它可以发现一些东西。
使用shipment(order_id, Updated_at)
复合索引,您无需强制使用索引。
关于mysql - MariaDB/MySQL : Index hint ignored when there is left join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53644130/