パフォチュー備忘録
パフォチュー対象
・原因
ぐるぐるSQL
http://blog.livedoor.jp/i_am_best/archives/8515327.html
実感としては数万回のexecuteが実行されるくらいから実用に耐えられない。 対話系なら100回とかでも論外?(今回はバッチなので知らん)
Indexどうのとかジョインがどうのとか再帰がどうのでなく、純然たる数の暴力によるパフォーマンス低下である。
・なぜか
COBOLコンバージョンだから。
世の4GLと呼ばれるプログラム達はデータIOが命で、日々謎のハイパフォーマンスを発揮してる(諸々サーバに集約されてるから)。
上記も手伝いカーソルオープンをループでぶん回す事に当時の技術者達は無抵抗。
表結合の概念が希薄な為、明細表をループでごり回ししてる。
そんなカーソルフェッチの世界観をOOP+埋込SQLでやるぜとなったときに、オープン文がSQLに変換される。
→大量executeQueryの出来上がり
・どうする
executeQueryを最小の回数にする。
・実装(java)
読込DBをとりあえずフルスキャンしてTreeMapに持たす。
カーソル処理したい場合はNavigableMapに抽出してpollFirstEntry等。
一本釣りならget。
・まとめ
TreeMapはカーソル処理の再発明