MySQL
SQL
Database

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

参考資料

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;