引き続きMySQLの話。
100万件を超えるデータを処理するとどうしても時間がかかる。
ひとつのデータから複数のテーブルを作る。
それぞれの複数のテーブルから再びテーブルを作る。
こんなことを繰り返すとテーブルの数がどんどん増えてくる。
1秒でも速く処理するために、いろいろクエリーを工夫する。
ところが、ある時、いきなりパフォーマンスが落ちた。
ん?おかしい。
で、マニュアルを入念に読むと、そこにはテーブルが333個を超えると
パフォーマンスが急激に落ちると書いてある。
数えてみたらテーブル数は340個にもなっていた。
データベース越しにクエリーを記述するのがおっくうになっていたため、
同じデータベースにたくさんのテーブルを作成してしまっていたのだ。
まさかね。こんなに増えるとは…。(^_^;)
それに加えて、次も反省点。
オラクルからMySQLへのDBを移送した際、フィールドタイプがデシマルになっていた。
当初は、なんにも気にしなかった。
ところがである。
処理時間があまりに遅いのでテーブルの容量を見たら、12ギガもある!?
え?
よくよく調べてみると、デシマルというフィールドタイプは、MySQLではアンパックの浮動小数点!
0でさえ、浮動小数点の情報を保持しているから容量は増える。
これじゃあ、フロートタイプの浮動小数点のほうがマシ。(パックしてるからね。)
実際に小数点以下のデータはない。
だからInt形式に変換してみた。
すると12ギガのデータが2ギガに激減。
当然、処理速度はめっちゃ速くなった。
今回の反省点。
オラクルからMySQLへの変換時にはフィールドタイプに注意すること。