大量データを扱う時の便利な、パーティショニング

アクセス解析とかクリック数とかをDBに保持すると大量のデータを格納しなくてはいけなくて
selectしたりするのが重くなってしまう。
そこで、mysql5.1から使えるようになった"パーティショニング"と言う機能を使うと多少は改善されそう。

以下、設定方法のメモ。

1.mysqlのパーティショニングを有効にする。
  ↓
  参考サイト
  有効にするには、mysqlの再コンパイルが必要になる。

2.月付毎にパーティションを作成する場合

CREATE TABLE logs (
id INT NOT NULL AUTO_INCREMENT,
client_name VARCHAR(32) NOT NULL,
log_data VARCHAR(1024) NOT NULL,
logged_at DATETIME NOT NULL,
PRIMARY KEY(id, logged_at),
INDEX(client_name)
) ENGINE=MyISAM
PARTITION BY RANGE( TO_DAYS(logged_at) ) (
PARTITION p200910 VALUES LESS THAN ( TO_DAYS('2009-11-01') ),
PARTITION p200911 VALUES LESS THAN ( TO_DAYS('2009-12-01') ),
PARTITION p200912 VALUES LESS THAN ( TO_DAYS('2010-01-01') )
);

※パーティショニングに使うカラム(今回の場合はlogged_at)はプライマリーキーの一部にしないといけないらしい。

これでselectとかは普通にいつも通りにすれば、条件によってそれぞれのパーティションテーブルのみ参照してくれるらしい。

3.パーティショニングを増やす方法

ALTER TABLE logs ADD PARTITION (
PARTITION p201001 VALUES LESS THAN ( TO_DAYS('2010-02-01') )
);

これしとかないと、パーティション外のデータを挿入した時にエラーとなる。
ならないようにするには毎月上記を行うか
PARTITION pmax VALUES LESS THAN MAXVALUE
を設定する。

4.どのパーティションテーブルが使われているかを確認する方法

EXPLAIN PARTITIONS SELECT * FROM logs


参考サイト
MySQLパーティショニングについて(その1:基本知識編)
15.3.4. パーティション情報の取得 | MySQL 5.1 リファレンスマニュアル
スポンサーサイト

トラックバック

コメント

コメントを残す

Secret


プロフィール

U2K

Author:U2K
いろいろプログラムに関しての覚え書きをちょくちょくと書いていきます。

オススメ










オススメ

忍者AdMax

u2k on Twitter

最近の記事