EVENTSTOCKLINK からのフィールドを持つ ACTION レコードのリストを生成しようとしています (存在する場合) 私のクエリは以前は次のようでした
SELECT
action.actionid,
partex.stockmake AS partexmake,
partex.stockmod AS partexmod
FROM
ACTION
INNER JOIN EVENT
ON action.eventid = event.eventid
LEFT JOIN
(SELECT registrationnumber,stockmake,stockmod,stocktran,eventid
FROM eventstocklink
LEFT JOIN stock ON stock.stockid = eventstocklink.stockid
WHERE statusid = '5'
GROUP BY eventstocklink.eventid
) AS partex
ON partex.eventid = event.eventid
WHERE actiondate2 BETWEEN 20130601
AND 20131031
AND event.siteid = 1
AND action.typeid = 1
このクエリには 4 秒以上かかります。スレッドからのアドバイスに従って、SELECT 行でサブクエリを実行しており、このようなクエリを作成することで実行時間を短縮できます。
SELECT action.actionid,
(SELECT stockmake FROM eventstocklink
LEFT JOIN stock ON stock.stockid = eventstocklink.stockid
WHERE statusid = '5' AND eventstocklink.eventid = event.eventid
GROUP BY eventstocklink.eventid) partexmake,
(SELECT stockmod FROM eventstocklink
LEFT JOIN stock ON stock.stockid = eventstocklink.stockid
WHERE statusid = '5' AND eventstocklink.eventid = event.eventid
GROUP BY eventstocklink.eventid) partexmod
FROM
ACTION
INNER JOIN EVENT
ON action.eventid = event.eventid
WHERE actiondate2 BETWEEN 20130601
AND 20131031
AND event.siteid = 1
AND action.typeid = 1
これがこのクエリを構成する最良の方法ですか - 「statusid=5」を持つ STOCK テーブルのフィールドをさらに含めたいと思います