Club DB2第2回に半分行ってきたよ
お盆を挟んでずいぶん前になってしまいましたが、8/11にCLUB DB2の第2回に行ってきました…というか、遅刻してしまいました。(--;)*1
もう受付にも誰もいなくて扉開かないんじゃないか、と思いながら、エレベータでマークシティの上の階へに上がったところ、、、いました!お姉様。「もう来ないと思った」とか言われて…すいません...本当に。
そんな1時間20分の大遅刻で行って、半分も居れなかったのですが、そんな短い時間の中でも仕事に役立つ大きな収穫を得られました。
大規模テーブルの論理分割
実は、4月に現職場に着任したとき、少しでも物理アクセスを減らせないか、と大きな実績テーブルを50くらいに分割する話が進行中だったのですが。こんな感じです。
CREATE VIEW VIEW_HOGE AS SELECT * FROM TBL_HOGE_1 UNION ALL SELECT * FROM TBL_HOGE_2 UNION ALL SELECT * FROM TBL_HOGE_3 UNION ALL ...
そして、CHECK制約を使って、存在範囲を明示してやろうという作戦です。
ALTER TABLE TBL_HOGE_1 ADD CONSTRAINT TBL_HOGE_1_CHK (jkondo >= 1 AND jkondo < 10) ALTER TABLE TBL_HOGE_2 ADD CONSTRAINT TBL_HOGE_2_CHK (jkondo >= 11 AND jkondo < 20) ALTER TABLE TBL_HOGE_3 ADD CONSTRAINT TBL_HOGE_2_CHK (jkondo >= 21 AND jkondo < 30) ...
Webアプリからは、VIEW経由でアクセスします。
ところが、結果を測定してみたところ全然速くなっていなくて、「テーブル論理分割しても意味ないじゃん!」という結論になり、結局1つのTBL_HOGEテーブルに戻したって話が。
もうすっかりあきらめてたんですが...
今回のセッションの中で、実はここはCREATE VIEWにWHERE条件を付ければよいんだよ、という話が。つまり、こういうことです。
CREATE VIEW VIEW_HOGE AS SELECT * FROM TBL_HOGE_1 WHERE jkondo >= 1 AND jkondo < 10 UNION ALL SELECT * FROM TBL_HOGE_2 WHERE jkondo >= 11 AND jkondo < 20 UNION ALL SELECT * FROM TBL_HOGE_3 WHERE jkondo >= 21 AND jkondo < 30 UNION ALL ...
と書いておけば、自動的にOptimizerが振り分けてくれるそうな。
な、なんだってー! な具合。なるほど、CHECK制約をいくら付けてもしょうがなかったんだ。WHERE条件とは確かに直接Optimizerが読みそうだよなぁ!などと感心しきり。
次にチューニングできる機会があったらやるんで、こちらでもご報告します。
こっちが本番、飲み会
で…本番の飲みのほうは「渋谷の飲み屋なら任せて」とかメールで言ってたくせに私のほうが全く準備不足で何もできずめっちゃ心苦しい中、結局朝まで飲んでました。(・ω・)
今回は1回目より大幅に人が膨れ上がって15〜6人来てたんですが、DB2(というかDBA)残酷話組、ひたすらDB2のTech話の組、それから全然関係ない話など微妙に集団が分かれて話してて、どこの席もすごい盛り上がりでした。それにしてもすっかり朝まで飲み会が板に付いてしまいましたね...
その後、昼過ぎから車で旅行へ出発したんですが...
二日酔いのほうは、前回言ってた例のアレ*2でばっちり完封でしたのでご報告。
次回は、9/8(金)に第2回のリランをやるそうです。
現在募集中ですが、例によってすぐ埋まる可能性があるので、お早めにどうぞ。
http://www-06.ibm.com/jp/software/data/developer/clubdb2/index.html
*1:急に開発チームに基本設計の説明会が開かれることになって... 2時間大演説会でした...