大量のデータを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は、パーティションに格納するデータ量に偏りがないように機械的に振り分けを行う。

この先は会員の登録が必要です。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら