ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

Hibernateをチューニング

many-to-oneにfetch="join"を入れてみたところ、JOINする件数が1000^3くらいになると、2割程度の速度改善がみられました。件数が100^3ぐらいだと逆に遅くなるようです。詳しくは結果をご覧ください。
http://d.hatena.ne.jp/taka_2/20051002#p1
しかし、fetch="join"って、LazyLoadingとは相反するオプションでしょうから、使い方には注意が必要でしょうね。主に、一覧形式の画面とか帳票を出すような処理では使えるのではないでしょうか。
→って書いてて思ったんですが、fetch="join"って書いちゃうと、そのクラスを使う限りは必ずjoinされてしまうんですかね。joinしたくない場合はどうするんでしょうか。

  1. fetch="join"するクラスと、しないクラスの両方を用意する
  2. なんか動的に設定が切り替えられる仕組みがあって、それを使う

1.はまあ現場的には敬遠されるやり方だが、えいやあ!な雰囲気ならやってしまいそう。2.は出来るのかどうかすら知らないですけど、やれたとしてもきわどいですね。切り替え忘れてなんか遅い。。なんてこと簡単に起こりそうですもの。
→それでHQLとかNativeSQLの登場なんですかね?HQLとかNativeSQLで書いた場合の性能も測ってみた方がいいかも。