考虑发货和订单表中都有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:复合索引查询优化