facebook twitter hatena line email

「Mysql/PARTITION BY RANGE」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「==PARTITION BY RANGEとは== カラムをPARTITION BY RANGE対応にすると、1つのパーティション内の条件のsqlの速度向上が期待できる。 公式...」)
 
(PARTITION BY RANGEとは)
 
(同じ利用者による、間の2版が非表示)
行1: 行1:
 
==PARTITION BY RANGEとは==
 
==PARTITION BY RANGEとは==
 
カラムをPARTITION BY RANGE対応にすると、1つのパーティション内の条件のsqlの速度向上が期待できる。
 
カラムをPARTITION BY RANGE対応にすると、1つのパーティション内の条件のsqlの速度向上が期待できる。
 +
 +
注意:innodb限定
  
 
公式:https://dev.mysql.com/doc/refman/8.0/ja/partitioning-range.html
 
公式:https://dev.mysql.com/doc/refman/8.0/ja/partitioning-range.html
行32: 行34:
 
)
 
)
 
PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) (
 
PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) (
PARTITION p202503 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-04-01 00:00:00') ),
+
PARTITION p201503 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-04-01 00:00:00') ),
PARTITION p202504 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-05-01 00:00:00') ),
+
PARTITION p201504 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-05-01 00:00:00') ),
PARTITION p202505 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-06-01 00:00:00') ),
+
PARTITION p201505 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-06-01 00:00:00') ),
PARTITION p202506 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-07-01 00:00:00') ),
+
PARTITION p201506 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-07-01 00:00:00') ),
PARTITION p202507 VALUES LESS THAN ( UNIX_TIMESTAMP('2025-08-01 00:00:00') ),
+
PARTITION p201507 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-08-01 00:00:00') ),
PARTITION p9 VALUES LESS THAN (MAXVALUE)
+
PARTITION pmax VALUES LESS THAN (MAXVALUE)
 
);
 
);
 
</pre>
 
</pre>

2025年3月4日 (火) 23:57時点における最新版

PARTITION BY RANGEとは

カラムをPARTITION BY RANGE対応にすると、1つのパーティション内の条件のsqlの速度向上が期待できる。

注意:innodb限定

公式: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 p201503 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-04-01 00:00:00') ),
PARTITION p201504 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-05-01 00:00:00') ),
PARTITION p201505 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-06-01 00:00:00') ),
PARTITION p201506 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-07-01 00:00:00') ),
PARTITION p201507 VALUES LESS THAN ( UNIX_TIMESTAMP('2015-08-01 00:00:00') ),
PARTITION pmax VALUES LESS THAN (MAXVALUE)
);