Posted at

ログテーブル実装するならパーティションプルーニング


参考資料

https://dev.mysql.com/doc/refman/5.6/ja/partitioning-pruning.html


パーティションプルーニングとは

特定の単位で分離し、対象としない単位をスキャンしないことで、効率的なテーブルスキャンを行うことができる。


実例

公式からt1というテーブルを例にとって考えてみましょう。

以下では、t1のregion_codeというカラムの値を64, 128, 192, それ以上という4つパーティションを作っています


CREATE TABLE t1 (
fname VARCHAR(50) NOT NULL,
lname VARCHAR(50) NOT NULL,
region_code TINYINT UNSIGNED NOT NULL,
dob DATE NOT NULL
)
PARTITION BY RANGE( region_code ) (
PARTITION p0 VALUES LESS THAN (64),
PARTITION p1 VALUES LESS THAN (128),
PARTITION p2 VALUES LESS THAN (192),
PARTITION p3 VALUES LESS THAN MAXVALUE
);

このt1というテーブルに対して以下のようなSELECT文を実行してみましょう。

このSELECT文で対象となるのはregion_codeが126, 127, 128, 129のデータのみである。

先ほどのパーティションに当てはめると、対象のデータがある可能性のあるパーティションはp1とp2のみであることがわかる。

つまり逆に言えば、p0とp3には存在しないことがわかるため、このSELECT文では、p1, p2のみスキャンを行う


SELECT fname, lname, region_code, dob
FROM t1
WHERE region_code > 125 AND region_code < 130;