tencent cloud

TDSQL-C for MySQL

セカンダリパーティション

Download
フォーカスモード
フォントサイズ
最終更新日: 2025-12-30 16:14:39

機能説明

データベースにおいて、パーティショニングはテーブルやインデックスデータを複数の論理部分に分割する技術であり、クエリ効率の向上や保守コストの削減などが可能です。一方、セカンダリパーティションではデータをより細かい粒度で分割できます。例えば、1つのパーティション内で複数のサブパーティションを再分割することで、データ管理とクエリ効率を向上させることができます。TDSQL-C for MySQLはrange型またはlist型のセカンダリパーティション作成をサポートします。

サポートバージョン

カーネルバージョン TXSQL 8.0 3.1.15 以降。

適用シーン

データの管理とクエリをより細かい粒度で行うには、セカンダリパーティションを利用してクエリ効率を向上させることが可能です。例えば大規模テーブルのパーティショニングがこれに当たります。

注意事項

新規追加されたテンプレート構文「SUBPARTITION TEMPLATE」により、各サブパーティションの定義は必ず一貫性を持つことになります。
各サブパーティションの名称は:プライマリパーティション名 $$ テンプレートセカンダリパーティション名です。
セカンダリパーティションはcolumn_listをサポートしていません。
グローバルインデックスが存在する場合、すべてのパーティションをtruncateする機能は現在サポートされていません。すべてのパーティションをtruncateする必要がある場合は、truncate tableを実行できます。
グローバルインデックスを含むパーティションテーブルでは、truncate partitionを実行する際、公式の動作と同様にonline ddlではなく、グローバルインデックスのメンテナンスが必要となるため、より長い実行時間がかかります。truncateの代わりにdeleteを使用することをお勧めします。
テンプレートセカンダリパーティション名には$$文字が存在してはいけません。
drop partitionを実行するにはグローバルインデックスの再構築が必要です。複数のdrop partitionを1つのステートメントにまとめて実行することを推奨します。これによりグローバルインデックスのメンテナンスコストを削減できます。
truncate partition操作は推奨されません。DMLをブロックする可能性があります。

使用説明

1. セカンダリパーティションを含むテーブルを作成します。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]

partition_options:
PARTITION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list)
| RANGE{(expr) | COLUMNS(column_list)}
| LIST{(expr) | COLUMNS(column_list)} }
[PARTITIONS num]
[SUBPARTITION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list) }
[SUBPARTITIONS num]
]
[SUBPARTITION BY
{ RANGE{(expr)} -- rangeセカンダリパーティションテンプレート
| LIST{(expr)} -- LISTセカンダリパーティションテンプレート
SUBPARTITION TEMPLATE [(subpartition_definition [, subpartition_definition] ...)]} -- サブパーティションテンプレート
]
[(partition_definition [, partition_definition] ...)]

subpartition_definition:
SUBPARTITION logical_name
[VALUES
{ LESS THAN {(expr | value_list) | MAXVALUE} -- Rangeサブパーティション範囲
| IN (value_list)}] -- Listサブパーティション範囲
[[STORAGE] ENGINE [=] engine_name]
[COMMENT [=] 'string' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] tablespace_name]
例:
CREATE TABLE `t1` (
`id` int DEFAULT NULL,
`purchased` int DEFAULT NULL,
KEY `idx` (`id`,`purchased`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY RANGE (`id`)
SUBPARTITION BY RANGE (`purchased`)
SUBPARTITION TEMPLATE
(SUBPARTITION s0 VALUES LESS THAN (10) ENGINE = InnoDB,
SUBPARTITION s1 VALUES LESS THAN (20) ENGINE = InnoDB)
(PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB) */;
2. ALTER TABLE構文
-- セカンダリパーティションのサポート
ALTER TABLE tbl_name
[alter_option [, alter_option] ...]
[partition_options] [subpartition_options] -- subpartition_optionsが追加されました。

subpartition_options:
subpartition_option [subpartition_option] ...

subpartition_options: {
MODIFY PARTITION partition_name TRUNCATE SUBPARTITION TEMPLATE subpartition_template_name; -- パーティションpartition_name内のテンプレート名subpartition_template_nameを持つサブパーティションをTRUNCATEします。
| TRUNCATE SUBPARTITION TEMPLATE subpartition_template_name -- subpartition_template_nameのセカンダリパーティションをTRUNCATEします。
| ADD SUBPARTITION TEMPLATE subpartition_definitions -- subpartition_definitionsテンプレートが追加されました。
| DROP SUBPARTITION TEMPLATE subpartition_template_name -- subpartition_template_nameのセカンダリパーティションを削除します。
}

―― プライマリパーティションDDL
ALTER TABLE t1 TRUNCATE p0 WITH GLOBAL INDEX; -- p0パーティションをTRUNCATEする(サブパーティションが存在する場合、その下のすべてのサブパーティションをTRUNCATEします)
例:
-- セカンダリパーティション DDL
ALTER TABLE t1 MODIFY PARTITION p0 TRUNCATE SUBPARTITION TEMPLATE s1; -- セカンダリパーティションp0_s1をTRUNCATEする(プライマリパーティションp0、サブパーティションテンプレート名s1)
ALTER TABLE t1 TRUNCATE SUBPARTITION TEMPLATE s1; -- すべてのパーティション内のサブパーティションで、名称のサフィックスが_s1であるものはすべてTRUNCATEされます。
ALTER TABLE t1 ADD SUBPARTITION TEMPLATE (SUBPARTITION s2 values in (1,2,3,4)); -- すべてのパーティションに、サフィックスが_s2であるサブパーティションが追加されます。
ALTER TABLE t1 DROP SUBPARTITION TEMPLATE s2; -- すべてのパーティションから、サフィックスが_s2であるサブパーティションが削除されます。

―― プライマリパーティション DDL
ALTER TABLE t1 ADD PARTITION (PARTITION p2 VALUES LESS THAN (20)); -- パーティションを追加します。t1がセカンダリパーティションテーブルの場合、デフォルトでテンプレートを使用してサブパーティションを生成します。
ALTER TABLE t1 DROP PARTITION p1;
ALTER TABLE t1 TRUNCATE p0 WITH GLOBAL INDEX; -- p0パーティションをTRUNCATEする(サブパーティションが存在する場合、その下のすべてのサブパーティションをTRUNCATEします)
3. 新しい時間関数がサポートされました。
tdsql_year、tdsql_month、tdsql_dayは、時間をYYYY、YYYYMM、YYYYMMDD形式に変換します。サポートされる型はDATE/DATETIME/TINYINT/SMALLINT/MEDIUMINT/BIGINT/CHAR/VARCHAR/VARBINARY/timestamp/binaryを含みます。
tdsql_year、tdsql_month、tdsql_dayがパーティションキー内の関数として使用される場合、binary型およびtimestamp型はサポートされません。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック