LoginSignup
2
2

More than 5 years have passed since last update.

MYSQLのパーティションテーブルを使ってみる

Last updated at Posted at 2018-02-06

レコード種別によるパーティションを行う場合のメモ

テーブル定義

動作確認のために, 以下のようなテーブルとデータを用意する

DROP TABLE IF EXISTS cards;

CREATE TABLE cards (
    card_id int (11) NOT NULL AUTO_INCREMENT
    , card_name varchar(255) NOT NULL
    , card_type  TYNYINT NOT NULL
    , PRIMARY KEY (card_id, card_type)
) PARTITION BY HASH(card_type) PARTITIONS 5;

パーティショニングするカラムをプライマリキーに含めなければならない.
パーティション対象のカラムは数値型でなければならない.
今回はMySQLで用意されたハッシュ関数をもとにして各テーブルへの割り振りを行っているが
RANGE COLUMNSLIST COLUMNSを使うことで, 割り振りのルールを自分で定義することもできる.

実行計画の確認

実行計画を調べるときはexplainではなくexplain partitionsを使う

MariaDB []> explain partitions select * from p_cards where card_type=2;
+------+-------------+---------+----------------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table   | partitions     | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+---------+----------------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | p_cards | p2             | ALL  | NULL          | NULL | NULL    | NULL |   212 | Using where |
+------+-------------+---------+----------------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

partitionsカラムで探索対象となったパーティションを知ることができる.

参考

MySQLマニュアル
パーティショニングの使用例 - カーディナリティが低いカラムを使って検索する場合

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2