野狐消暇録

所感を記す

SQLを書くときの方針

SQLを書くとき、安易に拡張SQL、例えばT-SQLやPL-SQLに乗っかって、SQL内でループ分を書くと、性能が低下するので嫌がられる。確かに、自分もループ文を使わずに、SELECT文などの純粋なSQLで書いた方が性能が出ると思うので、そうしている。

しかし、SQLはややデバッグしづらいと思う。SQLのSELECT文が副問合せをいくつも内部に抱えているような、大きなものになってしまった場合、データの途中が見えづらいので、特にデバッグがしづらい。

また、条件分岐も純粋なSQLでは書きづらいと思う。もちろん、書けなくないが、IF文の方が分かりやすく、保守しやすいのではないかと思う。

こういった事情を勘案すると、SQLを書く場合、以下の方針が良いと思う。

  • ひとつのSQLは小さめに作る。副問合せも、せいぜいひとつにとどめるようにする。それ以上の大きさになりそうだったら、いったん一時テーブルに格納する方法を検討する。性能に問題がない場合は、一時テーブルを使う事で保守性が上がることがある。
  • 条件分岐はSQL内で書こうとせず、T-SQLなどの拡張構文を使ってIF文を書くか、呼び出し元のプログラム内で済ませる。

結局、以下で行きたい。

  • 性能を出すために純粋なSQLで書き、ループを避ける。
  • それ以外の箇所では保守性を優先する。小さなSQL文、分かりやすい記述など。