Mysql/PARTITION BY RANGE
提供: 初心者エンジニアの簡易メモ
2025年3月4日 (火) 23:20時点におけるAdmin (トーク | 投稿記録)による版 (ページの作成:「==PARTITION BY RANGEとは== カラムをPARTITION BY RANGE対応にすると、1つのパーティション内の条件のsqlの速度向上が期待できる。 公式...」)
PARTITION BY RANGEとは
カラムをPARTITION BY RANGE対応にすると、1つのパーティション内の条件のsqlの速度向上が期待できる。
公式:https://dev.mysql.com/doc/refman/8.0/ja/partitioning-range.html 例
CREATE TABLE quarterly_report_status ( report_id INT NOT NULL, report_status VARCHAR(20) NOT NULL, report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) ( PARTITION p0 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-01-01 00:00:00') ), PARTITION p1 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-04-01 00:00:00') ), PARTITION p2 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-07-01 00:00:00') ), PARTITION p3 VALUES LESS THAN ( UNIX_TIMESTAMP('2008-10-01 00:00:00') ), PARTITION p4 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-01-01 00:00:00') ), PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-04-01 00:00:00') ), PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-07-01 00:00:00') ), PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-10-01 00:00:00') ), PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2010-01-01 00:00:00') ), PARTITION p9 VALUES LESS THAN (MAXVALUE) );
一ヶ月単位だと
CREATE TABLE quarterly_report_status ( report_id INT NOT NULL, report_status VARCHAR(20) NOT NULL, report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) ( PARTITION p202503 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-04-01 00:00:00') ), PARTITION p202504 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-05-01 00:00:00') ), PARTITION p202505 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-06-01 00:00:00') ), PARTITION p202506 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-07-01 00:00:00') ), PARTITION p202507 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-08-01 00:00:00') ), PARTITION p9 VALUES LESS THAN (MAXVALUE) );