大量のデータを1つのテーブルに格納すると何かと不便となる。処理対象が大量だけに検索をはじめとして処理時間が大きくなる。現実の生活は、手に余る大量の物を小分けにするというテクニックをよく使う。データベースでもこの手法は有効である。大量データを小分けにすることで、処理の高速化と格納効率を向上することが可能である。今回は、MySQL 5.1の新機能の筆頭に上がっているパーティショニングを解説する。

MySQL 5.1の注目機能パーティショニングとは

 パーティショニングとは、テーブルを分割して性能を向上させるための技術だ。MySQL 5.0でもテーブルの分割機能はあった。複数のテーブルを連結して1つのテーブルに見せかけるMARGEストレージエンジン(テーブル)、SELECTステートメントを結合するUNIONなどがある。これらの機能は、もともと別々のテーブルを結合して処理する後処理的な位置づけになる。

 パーティショニングは、1つのテーブルを分割して格納する抜本的な機能だ。1つのテーブルを分割することによって、高速化や要領拡大を実現する。

パーティショニングの基本動作

 パーティショニングは、テーブルの作成時に指定する。DBエンジン(テーブルタイプ)の指定のように、CREATE TABELステートメントの最後にパーティショニングの指定を行う。テーブルの基本的動作は、通常のテーブルと変りない。そのため、データの操作では、パーティショニングを意識する必要はない。

図1●パーティショニングの基本動作
図1●パーティショニングの基本動作

 データのデータ検索の際には、オプティマイザによって、必要なパーティションのみアクセスするようになる。そのため、検索時間が短縮化される。もちろん、振り分け対象のカラム以外の検索は、高速化されない。

パーティショニングによるレコードの降り分け方法

 パーティショニングは、対象となるカラムの値によって、各パーティションに振り分ける。パーティションに振り分ける方法には、RANGE、LIST、HASH、KEYの4種類が指定できる。

パーティショニング 内容
RANGE パーティションごとに範囲を指定して振り分ける
LIST パーティションごとに格納する値で振り分ける
HASH 1つのカラムの値を式の結果で振り分ける
式を指定しないとMOD関数を使用する
大量のデータにはLINEAR HASHが用意されている
KEY 1つ以上のカラムの値をMD5関数やPassword関数で評価して分割する

 RANGEおよびLISTは、指定したカラム(フィールド)の値によって、パーティションに振り分ける。そのため、どのパーティションにどのようなデータが含まれるか容易にわかる。逆にパーティションによって、格納するデータ量に偏りが発生するかもしれない。

 HASHおよびKEYは、パーティションに格納するデータ量に偏りがないように機械的に振り分けを行う。