2017-10-25 6 views
0

私はこのselectステートメントを高速化するための助けを探しています。私はこの声明に左のジョインをする必要があります。シンプルなジョインを行う(ジョイン、特に最初の2つのジョインでは、本当にスピードアップします)。すべてのLEFT JOINSを使用すると約33秒かかります。最初の2つのどちらかを通常のJOINSに変更すると、0.2秒かかります。最後をJOINに変更するには0.8秒かかります。これらの迅速なソリューションのいずれかが私に必要なすべての結果を私に与えることはありません。私はこのselectステートメントをスピードアップするのに助けが必要です

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

+2

ベンダーIDのない在庫レコードがありますか? –

答えて

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; 

これは勝利する必要があり、外側の集約、取り除きます。

+0

それはうまくいくようですが、私は "o.part_number = i.part_number AND"を削除しなければなりませんでしたが、その後は5.5秒になり、すべてを返すようです。 – Jeremy

関連する問題