私はjoinsとsubqueryを使ってクエリを書いています。その実行には2分かかります。私はそれを最適化することができませんどのように私はできますか?なにか提案を?このサブクエリはどのように最適化できますか?
select oli.*,oli2.* from order o
LEFT JOIN order_line_item oli ON oli.order_id = o.id
LEFT JOIN order_line_item oli2 ON oli2.id
= (SELECT oli3.id FROM order_line_item oli3
WHERE oli3.order_id = o.id
AND oli.code = oli3.alternative
GROUP BY oli3.code, o.id
LIMIT 1) WHERE o.store_id != 100 GROUP BY oli.code, oli2.code, o.id
サブクエリは正しく動作しますが、時間がかかりすぎます。実際には、それは代替製品を見つける。サブクエリを最適化するにはどうすればよいですか?
クエリに関係するすべてのテーブルに対して、 'SHOW CREATE TABLE'出力を提供してください。 –
また、 '*'を選択する必要がありますか?すべての列が必要ない場合は、テーブル構造(上記のコメント)から学んだ内容と必要な列に基づいて改善が行われる可能性があります。 –
'*'のために 'GROUP BY'の無効な使用のような臭いがあります。 –