« SQLでゼロ除算を避ける方法 | トップページ | なにげない操作 »

2008年8月31日 (日)

333を超えるとパフォーマンスは落ちる

引き続きMySQLの話。

100万件を超えるデータを処理するとどうしても時間がかかる。
ひとつのデータから複数のテーブルを作る。
それぞれの複数のテーブルから再びテーブルを作る。

こんなことを繰り返すとテーブルの数がどんどん増えてくる。

1秒でも速く処理するために、いろいろクエリーを工夫する。
ところが、ある時、いきなりパフォーマンスが落ちた。

ん?おかしい。

で、マニュアルを入念に読むと、そこにはテーブルが333個を超えると
パフォーマンスが急激に落ちると書いてある。

数えてみたらテーブル数は340個にもなっていた。
データベース越しにクエリーを記述するのがおっくうになっていたため、
同じデータベースにたくさんのテーブルを作成してしまっていたのだ。

まさかね。こんなに増えるとは...。(^_^;)

それに加えて、次も反省点。

オラクルからMySQLへのDBを移送した際、フィールドタイプがデシマルになっていた。
当初は、なんにも気にしなかった。

ところがである。

処理時間があまりに遅いのでテーブルの容量を見たら、12ギガもある!?

え?

よくよく調べてみると、デシマルというフィールドタイプは、MySQLではアンパックの浮動小数点!
0でさえ、浮動小数点の情報を保持しているから容量は増える。

これじゃあ、フロートタイプの浮動小数点のほうがマシ。(パックしてるからね。)

実際に小数点以下のデータはない。
だからInt形式に変換してみた。

すると12ギガのデータが2ギガに激減。
当然、処理速度はめっちゃ速くなった。

今回の反省点。
オラクルからMySQLへの変換時にはフィールドタイプに注意すること。

« SQLでゼロ除算を避ける方法 | トップページ | なにげない操作 »

03 アプリケーション」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« SQLでゼロ除算を避ける方法 | トップページ | なにげない操作 »