SQLは人間が書く

もとのFowlerさんの記事はまだ読んでないんですけれど、

私は最近O/R mapping toolに懐疑的で、コードにSQLを含むこと自体は悪くなく、SQLを含んでなおmaintableでtestableな書き方を探すのが本来なのではと感じています。

はんばあぐさんの日記のここに同意です。

キャッシングは置いておいて、私が疑問なのはツールによるSQLの自動生成です。
動的に生成されるSQLって、パフォーマンスは充分なのでしょうか?
1テーブルを相手にする場合ならおかしなSQLが生成されることはないと思いますけれど、業務ではややこしいSQLが必ずあります。例えば、

  • 10テーブルをJOINして
  • 外部結合も相関副問い合わせもあって
  • そのSELECT文が複数UNION ALLされる

ようなクエリでパフォーマンスが充分なものって、動的に生成できるものなんでしょうか?

それに、SQLでは実現可能なのに自動生成ツールでは実現できないSQLもあるようですし、SQL自動生成ツールにはもうちょっとの熟成を期待しています。

現実解は、

  • SQLは人間が書く。
  • 結果セット→オブジェクトへの変換は、難しいことではないので何とかする。

というトコロではないかと思います。