3 つの MySQL テーブルがあります。 PRODUCT
は 2 人の子供を持つ親でUK_SALES
あり、AUS_SALES
. UK_SALES
との構造AUS_SALES
は同じでPRODUCT
、製品 ID を介して関連付けられています。
特定のカテゴリの製品について、UK と AUS での売上の和を取得したいので、次のクエリを使用しています。
SELECT au.* FROM aus_sales au
INNER JOIN product p on p.id = au.id
WHERE p.category = 'electrical'
UNION ALL
SELECT uk.* FROM uk_sales uk
INNER JOIN product p on p.id = uk.id
WHERE p.category = 'electrical'
今、それはうまくいきますが、それが最適かどうかはわかりません。具体的には、製品テーブルを2回スキャンして制限すると思います
WHERE p.category = 'electrical'
.
これは本当にそうですか?それとも、MySQL は 2 番目の選択で使用するために最初のフィルターの結果をキャッシュしますか?
第二に、このクエリを記述するより良い方法はありますか?
製品テーブルと売上テーブルは両方とも数百万のレコードに実行されるため、パフォーマンスが重要になります。
ありがとう!