今日はMySQLに対し数千万件のデータ生成バッチを組んでましたが、重複禁止のデータの為主キーにしていたら200万件超えた辺りから見る見るデータ挿入が遅くなる。これは挿入のたびに重複検査するから遅くなるのかとうっかりしてました。それでINDEXなら大丈夫だろうとキーの種類変えて再実行したら主キーのときに比べれば若干マシなのですがそれでも500万件超えると極端に遅くなる・・・。何でだろうとちょっとSELECTしてみたらINDEXのフィールドはソートされるのか!今までメモリにキャッシュしてるだけかと思ってた。こんなのDBエンジニアやシステム開発者では常識なんだろうな。。。結果、INDEXを全く付けないテーブルだと最も速い(挿入以外の処理をしない)事になりますが当然検索や集計には向かないので記録用テーブルと集計用のクローンテーブルって必要なんだな・・・。並べ替え不要な条件だったら速いのならログ関係はタイムスタンプのみINDEX貼って、集計クローンテーブルは集計期間で拾って作成すると効率よさそう。(やってみないと差が分かりませんが)
これはMySQL5.1のパーティショニングを使ったときはどのような挙動するだろうか?INDEXなしは余りパフォーマンスが変わらなくて、INDEX付きが結構速くなり、主キーだとちょっと速くなりって感じかな?
コメントする