【问题标题】:I need help speeding up this select statement我需要帮助加快这个选择语句
【发布时间】:2017-10-26 10:08:20
【问题描述】:

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

这是我设置的索引。

【问题讨论】:

  • 您确定有没有供应商 ID 的库存记录吗?

标签: mysql sql database select join


【解决方案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;

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

【讨论】:

  • 这似乎可行,我不得不删除“o.part_number = i.part_number AND”,但之后它下降到 5.5 秒并且似乎返回了所有内容。
猜你喜欢
  • 1970-01-01
  • 2016-10-03
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多