我正在寻求帮助加快这个选择声明。我需要在这个声明上做左连接,这导致它真的陷入困境。做一个简单的连接(在任何连接上,尤其是前两个连接,确实加快了速度)。使用所有LEFT JOINS大约需要33秒。将前两个中的任何一个更改为常规JOINS需要0.2秒。将最后一个更改为JOIN需要0.8秒。任何这些更快的解决方案都无法提供我需要的所有结果。
SELECT
i.id, i.part_number, v.name, i.description, sum(oi.quantity) as count, i.filename, "0"
FROM
inventory i
LEFT JOIN
order_items_part_numbers o
ON i.id = o.inventory_id
LEFT JOIN order_items oi
ON oi.id = o.order_items_id
LEFT JOIN vendors v
ON v.id = i.vendor_id
WHERE
i.deleted = 0 GROUP BY i.part_number
答案 0 :(得分:1)
您可以尝试使用子查询:
SELECT i.*, v.name,
(SELECT SUM(oi.quantity)
FROM order_items_part_numbers o JOIN
order_items oi
ON oi.id = o.order_items_id
WHERE i.id = o.inventory_id
) as count, '0'
FROM inventory i LEFT JOIN
vendors v
ON v.id = i.vendor_id
WHERE i.deleted = 0;
这摆脱了外部聚合,这应该是一个胜利。