【发布时间】:2019-05-07 17:17:51
【问题描述】:
考虑发货和订单表中都有 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
【问题讨论】:
-
EXPLAIN {query}andSHOW CREATE TABLE shipmentandSHOW CREATE TABLE orders看看你有什么索引。 -
order by limit clauses 需要进行一些优化。
-
将
LEFT JOINs 报告为 Pagerfanta 库中的错误 :-) 对您使用的代码负责。 -
你可以分叉项目并修复它。 github.com/whiteoctober/Pagerfanta
-
我真的想删除这个问题
标签: mysql join indexing mariadb