下記のようなSQLを作りました。
SELECT TBL_A.A1 , ( SELECT COUNT(Y) FROM TBL_Y WHERE TBL_Y.A1 = TBL_A.A1 AND TBL_Y.Y1 = ( SELECT Z FROM TBL_Z WHERE TBL_Z.A1 = TBL_A.A1 AND TBL_Z.Z1 = TRUE ) AND ) AS Y_SUM from TBL_A, TBL_B Where TBL_A.A1 = TBL_B.A1
TBL_A は4件
TBL_B は6万件
TBL_Y は145万件
TBL_Z は2.5万件
あります。
単純にTBL_AのA1に一致するTBL_Yの合計値を抽出したいだけです。
ただ、TBL_YのデータははTBL_ZのZ1がTRUEに限ります。
上記Sqlを実行すると約20秒ほどかかり、困っています。
抽出時間が早い書き方はありますか?
宜しくお願い致します。
-----------追加-------------------
EXPLAINの結果
|id|select_type|table|type|possible_keys|key|ref|Extra|
|1|PRIMARY|TBL_A |index |PRIMARY|PRIMARY|(null)|Using where; Using index|
|1|PRIMARY|TBL_B |eq_ref |PRIMARY|PRIMARY|TBL_A.A1|Using index|
|2|DEPENDENT SUBQUERY|TBL_Y |ref |PRIMARY,MUK_IDX2|MUK_IDX2|TBL_A.A1|Using where|
|3|DEPENDENT SUBQUERY|TBL_Z |ALL |(null)|(null)|(null)|Using where|
A1はint(8)型で、TBL_BのA1はプライマリーキーで重複・NULLはありません。
TBL_A,TBL_Y,TBL_ZはNULLはありませんが、重複はあります。
回答2件
あなたの回答
tips
プレビュー