今回は、VPの紹介をします。
VPとはVertical Partitioning(垂直パーティショニング)の略で、Spiderと同じく斯波建徳さんの作ったMySQLのストレージエンジンになります。
これは、Spiderの姉妹品のようなもので、1つのテーブルを複数のテーブルにカラム分割します。
イメージとしては、以下のようなものになります。
VIEWに似ていますが、
- INSERTできる
- 複数の分割先のテーブル(子テーブル)でカラムの重複が可能
などの点で、VIEWと異なり、これだけの違いでさまざまなことが可能になります。
VPもSpiderと同じくCommentを利用して設定します。
インストール方法は、EC2でMySQL(Spider編1 Spiderってなんじゃ?)で紹介したSpiderのバイナリにVPも含まれているので、そちらを参照してください。
では、まずは試してみます。
たとえば以下のようなテーブルがあるとします。
create table gift( id int auto_increment, shop_id int, country_id int, gift_type int, gift_name varchar(255), description text, created_at datetime, primary key(id), key shop_idx(shop_id), key country_idx(country_id) )engine=InnoDB;
このテーブルは、以下のように分割できます。
create table gift_key( id int auto_increment, shop_id int, country_id int, gift_type int, gift_name varchar(255), primary key(id), key shop_idx(shop_id), key country_idx(country_id) )engine=InnoDB; create table gift_detail( id int, gift_type int, gift_name varchar(255), description text, created_at datetime, primary key(id) )engine=InnoDB; create table gift( id int auto_increment, shop_id int, country_id int, gift_type int, gift_name varchar(255), description text, created_at datetime, primary key(id), key shop_idx(shop_id), key country_idx(country_id) )engine=VP comment 'table_name_list "gift_key gift_detail"';
ここで、VP化したgiftテーブルにデータを投入してみます。
mysql> INSERT INTO gift (shop_id, country_id, gift_type, gift_name, description, created_at) -> VALUES (1, 103, 1, 'ハム', 'ハムの人になれます。', CURRENT_TIMESTAMP); Query OK, 1 row affected (0.03 sec)
問題なくINSERTすることができました。
また、それぞれの子テーブルに重複したカラムにも値が投入され、
かつgiftテーブルから1つのテーブルのようにSELECTできることがわかります。
mysql> select * from gift_key; +----+---------+------------+-----------+-----------+ | id | shop_id | country_id | gift_type | gift_name | +----+---------+------------+-----------+-----------+ | 1 | 1 | 103 | 1 | ハム | +----+---------+------------+-----------+-----------+ 1 row in set (0.00 sec) mysql> select * from gift_detail; +----+-----------+-----------+--------------------------------+---------------------+ | id | gift_type | gift_name | description | created_at | +----+-----------+-----------+--------------------------------+---------------------+ | 1 | 1 | ハム | ハムの人になれます。 | 2011-09-12 22:10:16 | +----+-----------+-----------+--------------------------------+---------------------+ 1 row in set (0.00 sec) mysql> select * from gift; +----+---------+------------+-----------+-----------+--------------------------------+---------------------+ | id | shop_id | country_id | gift_type | gift_name | description | created_at | +----+---------+------------+-----------+-----------+--------------------------------+---------------------+ | 1 | 1 | 103 | 1 | ハム | ハムの人になれます。 | 2011-09-12 22:10:16 | +----+---------+------------+-----------+-----------+--------------------------------+---------------------+ 1 row in set (0.00 sec)
今後いくつかVPの活用の仕方を紹介できればと思います。
こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら