2021.04.07
SQLチューニング(第3回)「サブクエリと性能問題の理解」(1/8)
SQLチューニング第3回は、「サブクエリと性能問題理解」に関しての8回シリーズの第一回目になります。それでは、早速初めて行きましょう。
2.1.1 サブクエリーに対する基本内容を理解すること
2.1.1.1サブクエリとは
サブクエリはWhere節に比較条件で使われるSelectクエリーを意味する。 通常的にSQLを作成する場合、すべてのテーブルを結合で作成することより、メイン集合を作ってサブクエリを使って値を比較していく手続き的SQL作成が容易だという点に共感するだろう。
しかし、サブクエリを使わないで結合で処理が可能なSQLにもかかわらず、単にSQL作成が容易だという理由一つだけでサブクエリを乱用する場合、DBサーバーに深刻な性能問題が発生する可能性があるので格別に注意しなければならない。 なぜなら、SQLにサブクエリがいくつか存在する場合、Optimizerが最適化過程で誤ったCost計算をする場合がたくさん発生するためである。
もちろんサブクエリを使ってこそ意図した結果値を持ってくることができる場合もあって、サブクエリを利用する場合、性能が良くなるSQLも明確に存在する。 ところが上記の二パターンの状況ではないならば、サブクエリを使うことより結合で作成することの方がOptimizerの正確な判断を促進し性能問題を予防することができる。
実際に、プロジェクト進行時サブクエリの個数が多いSQLをOptimizerが誤ったCost計算で非効率的な実行計画を樹立したために、DBサーバーの性能に悪影響を及ぼしたケースを少なからず見てきた。
しかし、サブクエリはを無条件使ってはいけないというのではない。 サブクエリの動作方式や発生可能な性能問題に対する理解なしで、無分別にサブクエリを使うのを止めなければならないということである。 したがって今回はサブクエリがどのように動作するのか調べてみた後、サブクエリに関連した性能問題を最小化できる方法を調べてみることにする。
今回は、ここまでです。次回は、サブクエリのパターンについてのお話となります。ご期待ください。
See You again! ByeBye^^