パフォーマンスと記述について
例えば
「3つのテーブルからあれやこれやとデータを取って項目と一部の計算結果を取得する」
というお題があった時に、どう実現するかは技術者次第になるもの。
(1) Javaだけ
(2) Java+PL/SQL
この選択肢になるのだけれど、もちっと詳細化すると
(1)-1 1本のSQL文作成 → 発行 → 1撃で取得
(1)-2 何個かののSQL文作成 → 都度発行 → 都度取得 → ロジック内でデータ作成(集計)
(1)-3 Viewを作っておく → 1本のSQL文作成 → 発行 → 1撃で取得
PL/SQLを使用する際にはワークテーブルとかテンポラリテーブルの存在がこっそり欠かせません。*1
(2)-1 PL/SQL内で(1)-1みたいなことやる
※ワークテーブル作成(初期化)
→ 1撃でデータをInsert
(2)-2 PL/SQL内で(1)-2みたいなこと
ワークテーブル作成(初期化)
→ メインのテーブルからデータをInsert
→ サブのテーブルその1から特定の項目Update
→ サブのテーブルその2から特定の項目Update
→ その他計算するところをUpdate
(2)-3 Viewを作っておく → PL/SQL内で(1)-3みたいなこと
世の中のプロジェクトは数あれど。
(1)-1で問題がでないことなどゼロだゼロ。
作りにくいしメンテしにくいし改変なんざ神頼み。
(1)-2がよいかというとそんなことはもちろんない。
(2)-1はそれならView作れやとなるし、
(2)-3など何の意味もなく、
選択肢として残るのは(1)-3か(2)-2。
余談だけど、(1)-1でやるのと、(2)-2でやるのとの実測値の差を測ったことがあって。
イメージ的に(1)-1のが早そうに思っていたけど現実は圧倒的に(2)-2のが速かった。
PL/SQLすげーと思ったものですよ。
(1)-1と(1)-3は実測的にはたいした差は無く、
複雑なSQLをJavaに書くかView定義に書くかの違いが主。
SQL大好きなら(1)-3でいいんでないかなと思わなくも無い。
記述だけでみるなら断然Viewの方が楽に書ける。
ちなみに。
1開発者としては、状況が許す限り(2)-2を選ぶ。
速度で早く、開発が楽で、メンテナンスが容易だから。
速度は上記の通りで、
開発が楽なのは複雑怪奇なSQLに頭を悩ます必要がないから。
データを如何にして取ってくるかを悩んで試行錯誤するのと、
右から左に動かしてそれを確認するのとどっちが楽でしょうってのの解が理由。
頭を悩ます必要がなくなればメンテナンスも容易ですよとそーゆーことですよ。
*1:UIから呼ばれてデータ表示する処理において、データを取得するための場所はいらないはずがない