SQLのいい点(ORMと比較して)
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か? を受けて。
だそうなので。
SQLのいい点
- DBMSのフル機能が使える
- DBMSは色々便利な機能があってSQLをインターフェースとして提供されている
- 分かりやすいところだとストアドプロシジャとかwith句とかOLAPクエリとか
- ORMだとそれらの全てには対応できない(はず)
- DBMS依存の機能だと特に
- DBMSは色々便利な機能があってSQLをインターフェースとして提供されている
- クエリチューニングしやすい
- SQLは抽象度が高い言語で実際に実行されるのはplanner/optimizerで作られた実行計画ではあるが、SQLからそれなりにコントロールできる
- ORMの気持ちが分かる人ならORMからコントロールできるのかも。自分は生SQL派なのでできません。
- 特にJOINやサブクエリが複雑に絡むクエリだと、ORMが吐くSQLは経験上だとあまり信用出来ない
- これはORMの進化次第では解決するかも。現状ではという意味で。
- SQLは抽象度が高い言語で実際に実行されるのはplanner/optimizerで作られた実行計画ではあるが、SQLからそれなりにコントロールできる
パッと思いつくところだとこの辺で。思いついたら追記します。
使い分け
ですよね。結局。SQLを十分理解せずにSQLクソだからORM使おうというのも、ORMはクソだから使い物にならないというのも、やめておいた方がいいのでは。
個人的にはORMで抽象化された範囲で十分かつシンプルなクエリが中心という使い方で十分であれば、ORMを採用した方がいいと思います。
夢
ORMがSQLを吐くんじゃなくて、言語側に直接リレーショナルモデルを操作するDSLと、DBMS側にSQLを通さずにリレーショナルモデルを操作できるAPIがあれば面白いと思います。
それなら実行計画を直接渡せばいいという話もありますが、DBMSで培われた最適化を言語側で再実装するのは無理ぽいので。