我需要帮助加快这个选择语句

时间:2017-10-25 16:28:03

标签: mysql sql database select join

我正在寻求帮助加快这个选择声明。我需要在这个声明上做左连接,这导致它真的陷入困境。做一个简单的连接(在任何连接上,尤其是前两个连接,确实加快了速度)。使用所有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

以下是我设置的索引。 enter image description here

1 个答案:

答案 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;

这摆脱了外部聚合,这应该是一个胜利。