パーティショニング

概要

指定したカラムの内容に応じて、データを分割格納してくれる機能。
MySQL側が勝手に物理領域を分けて格納してくれるため、SELECTなどでの操作方法は変わらない。
大量データを扱う際の高速化には効果大。
※MySQL(に限らず)では、何もしないと格納データ量の増加に伴い、
 検索時間が飛躍的に増加してしまうが、この機能によりそれを抑えることが可能。
 例として、単純な主キーでの検索時間が
   格納件数:約 100万件(パーテイショニングなし)→0.01秒未満
   格納件数:約1000万件(パーテイショニングなし)→2.00秒以上
   格納件数:約1000万件(パーテイショニングあり)→0.01秒未満
 などの違いになることも。(環境・設定にも大きく左右されるのであくまで一例)

使用注意点

MySQLが5.1以降であること。
分割したい項目が主キーに含まれていること。

分割方法

名称 説明
RANGE カラム値の範囲毎に分割して格納
LIST カラム値毎(1,3,5などの組み合せも可)に分割して格納
HASH カラム値を評価式(デフォルトはMOD)の結果毎に分割して格納
KEY カラム値の評価式(PASSWORDなど)の結果毎に分割して格納。カラムが文字列でもOK
※上記の他にLINER HASH, LINER KEYがあり。(使用評価式が大規模分割向きのもの)

設定方法

テーブル作成時、作成後のテーブル変更どちらでも可。
個々の詳細はマニュアル、ヘルプ等を参照のこと。
以下はHASHを使用する際の作成例。

CREATE TABLE t_rate ( 
   id          INT NOT NULL, 
   currency_id INT NOT NULL, 
   date_time   BIGINT, 
   rate        DECIMAL(12, 8), 
   PRIMARY KEY (id, currency_id) 
) ENGINE=InnoDB PARTITION BY HASH (currency_id) PARTITIONS 10;

これで、内部的にcurrency_idの値毎に分割される。
操作は全てt_rateに対して行えばOK。
最終更新:2012年05月13日 10:46