考虑发货和订单表中都有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
答案 0 :(得分:1)
左联接在订购输出之前需要找到货件的order_id
。
强制索引通常是错误的事情,即使它可以发现某些事情也是如此。
使用shipment(order_id, updated_at)
的复合索引,则无需强制建立索引。