2016-09-23 14 views
1

サブクエリがかなり含まれているクエリがあります。完全にロードするのに20分かかります。ここでサブクエリに関連付けられた更新クエリを高速化する方法

は私のクエリです:

UPDATE orders AS o 

LEFT JOIN (
    SELECT obe_order_master_id, COUNT(id) AS count_files, id, added 
    FROM customer_instalments 
    GROUP BY obe_order_master_id 
) AS oci ON oci.obe_order_master_id = SUBSTRING(o.order_id, 4) 

SET o.final_customer_file_id = oci.id, 
    o.client_work_delivered = oci.added 

WHERE oci.count_files = 1 

は、私はこのクエリを高速に実行することができます方法はありますか?

+0

まだ参加していない場合は、結合してフィルタリングするために使用するcolnumのインデックスを作成します。 – johnnynemonic

+0

クエリの前に「Explain Extended」を追加して実行し、結果を質問に追加します。 – Shaharyar

答えて

1

一時テーブルに移動Where条件を、これはそうフィルタリングを削減し、パフォーマンスを向上させるために役立つことがあり、一時テーブルから不要な行を削除します、HAVING句でWHEREを交換

UPDATE orders AS o 
LEFT JOIN (
    SELECT obe_order_master_id, id, added 
    FROM customer_instalments 
    GROUP BY obe_order_master_id 
    HAVING COUNT(id) = 1 
) AS oci ON oci.obe_order_master_id = SUBSTRING(o.order_id, 4) 
SET o.final_customer_file_id = oci.id, 
    o.client_work_delivered = oci.added 
+0

27秒に短縮されました。 – Fury

+0

ちなみに、UPDATEクエリのOUTER JOINは少し愚かです。 – Strawberry

0

私はのために別の列を作成することをお勧めOrder_id部分文字列とそれに対するインデックスを作成します。次に、この列をWHEREに使用します。

関連する問題