のみが含まれている場合op.presale
にインデックスを持つことは良いアイデアです。 である少なくとも一つの前売り値を持つすべてのorder_id
を見つけた新しいサブクエリに参加するためにここに
SELECT
op.order_id
FROM order o
INNER JOIN order_product op
ON o.order_id = op.order_id
LEFT JOIN
(
SELECT DISTINCT order_id
FROM order_product
WHERE presale <> 0
) t
ON op.order_id = t.order_id
WHERE
o.quantity_complete = 0 AND
t.order_id IS NULL -- replaces the HAVING clause
GROUP BY op.order_id
基本的な考え方を:しかし、あなたはWHERE
句にHAVING
句でロジックを移動するためにクエリを書き直すことができますではありません。そのようなマッチングorder_id
は、したがって、ゼロに等しくない前売りの合計を有する。私はこのサブクエリにLEFT JOIN
を使用し、このサブクエリに一致するではないの注文レコードだけを保持します。
私はこの場合に何か改善するつもりはないと思います。しかし、あなたは自分で確認することができます!インデックスを作成する前後にEXPLAINを使用し、違いがあるかどうかを確認してください。私は違いがあるとは思わない。 –