プロが教える店舗&オフィスのセキュリティ対策術

おせわになっております。
MySQLを愛用していますが、気になる疑問にぶつかりましたので、質問させてください。

★MySQLの4.1系のサブクエリは、性能が悪いのですか?

たとえば
select * from t1 where key in (
select key from t2 where key2 in (
select key2 from t3 where col = 1))

のようなことをしようとしたとき、ものすごく遅いことがあります。

あきらめて、クエリを分けて、小分けに実行すれば、速いです。

サブクエリなどを高速に実行させる方法などありますでしょうか?MySQL5では違うものなのでしょうか?

よろしくお願いします

A 回答 (1件)

サブクエリという方法に拘りますか?


キーがユニークならinner joinとかどうですか?
(キーがユニークでなくても、この結果の重複を取れば良いだけですが)

select tb1.*
from (
tb1
inner join tb2
on tb1.key=tb2.key
)
inner join tb3
on tb1.key=tb3.key
where tb3.col = 1
;


ちなみに、うちの環境だと複問い合わせがうまくいきませんでした。
何故でしょうか?バージョンが古いからかな?

version: 3.23.52-log

mysql> select item1 from tb1 where item1 in (select item1 from tb2);
ERROR 1064: You have an error in your SQL syntax near 'select item1 from tb2)' at line 1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!