MySQLパーティショニングのまとめ
MySQLにパーティショニングという機能があることを最近知った。調べても正直ついて
いけてないが、いつか利用することもあるかもしれないのでまとめておく。
パーティショニングとはテーブルを分割して性能を向上させるための技術で、MySQL5.1
以降実装された。1つのテーブルを分割することにより高速化や要領拡大を実現し、
巨大なテーブルを使用する場合に威力を発揮する。
ちなみにオフィシャルサイトによれば「コンパイル時の不手際」により、MySQL 5.1.12
のバイナリ配布にはパーティショニングは含まれていないため、利用するにはバージョン
アップが必要。
ソースからコンパイルする場合は、- -with-plugins=partitionとともにconfigureを実行する。
(- -with-partitionオプションはもう古いようで警告が出るが、有効にはしてくれる)
パーティショニングを利用するには、テーブル作成時に指定する。
コマンドの具体例に関しては割愛するが、基本構文だけでも書いておくと以下のようになる。
PARTITION BY パーティショニングの種類(定義)
ここで言うパーティショニングの種類とは後述するRANGE、LISTなどである。
なおテーブルの基本的動作は通常のテーブルと変りなく、データ操作においてはパーティ
ショニングを意識する必要はない。
水平パーティショニングと垂直パーティショニング
MySQL 5.1がサポートするのは、行ごとにそれぞれパーティションへ振り分けるタイプの
水平パーティショニングである。
ちなみに垂直パーティショニングはテーブルの一部の列だけを抜き出す形で分割を行い、
カラムごとにそれぞれパーティショニングに割り当てられることになる。
パーティショニング 4つの種類
パーティショニングはある特定のカラム値に注目して行われ、カラム値の評価の仕方により
パーティショニングは次の4つの種類に分類される。
1.RANGE
パーティションごとに範囲を指定して振り分ける。
カラムの値の範囲をパーティションごとに設定する。2.LIST
パーティションに振り分けられるべき値を直接指定(リストアップ)する。3.HASH
整数値のカラムに対してMOD()関数(割り算の余り)によりパーティション
の振り分けを行う。4.KEY
文字列のカラムに対してPASSWORD()関数により算出されるハッシュ値を用いる。
RANGEおよびLISTは、指定したカラム(フィールド)の値によってパーティションに
振り分けるため、どのパーティションにどのようなデータが含まれるか容易にわかる。
逆にパーティションによって格納するデータ量に偏りが発生する可能性はある。
HASHおよびKEYは、パーティションに格納するデータ量に偏りがないように機械的に
振り分けを行う。
と、いうことだそうだ。この辺りは以下リンクを参考にした(というか抜粋)。
第1回:ここが新しい!MySQL 5.1 – パーティショニング
[MySQLウォッチ]第40回 パーティショニングで高速化し大量データに備える
インスタンス全体においてパーティショニングが有効かどうかを確認するには、以下
コマンドを実行し、”have_partitioning “が”YES “ならOK。
mysql> SHOW VARIABLES LIKE ‘%partition%’;
あれこれ書いたけど、理解するには実際に自分で使ってみるしかないでしょうね。