🐘
RDBMS の SQL クエリは実行前に最適化されるのか?
疑問
データベースはまったく門外漢なんだけど SQL 書こうと思うと計算量が気になって仕方がない。ぶっちゃけそんな計算量が気になる程大量のデータを取り扱う場面はいまのところそんなに遭遇してないのでよいのだが気になるもんは気になる。
たとえば
SELECT name, email FROM meibo JOIN email ON meibo.id = email.id;
と
SELECT name, email FROM meibo, email WHERE meibo.id = email.id;
だと直感的に下のほうが計算量小さそうじゃないか[1]、とかスッゲェ気になる。
でもさぁ、頭のいい人たちがその程度のこと考えないわけがないよなぁ!?
実行前に! オプティマイズ! されてるんじゃないですか!?
ChatGPT に聞いてみた
裏取り
調査結果
限度はあると思うが、実行前に最適化されてるらしいのであんま細かいことは気にしなくてよさそう。
これで安心して SQL が書ける。ありがとう ChatGPT。我が友よ。
追記
かちゃかちゃ(@haruo31)さんが「explain
と前に書くと実行計画を教えてくれる」との情報をくださいました。
ほんまや! ありがとうございます!!
-
SQL が書いた通りに実行されるならば JOIN のほうはあとで抽出する予定がないすべてのカラムまで結合した新しいテーブルを作成し、そこから
name
とemail
という列だけを取得するというめちゃくちゃ無駄な処理をすることになる。結合前のテーブルがデカい場合、空間計算量が非常に大きくなるはず。 ↩︎
Discussion