tencent cloud

TDSQL-C for MySQL

動向とお知らせ
製品アップデート
製品お知らせ
初心者ガイド
製品概要
プロダクト概要
製品の強み
適用シーン
製品アーキテクチャ
製品仕様
インスタンスタイプ
製品機能一覧
データベースのバージョン
リージョンとアベイラビリティゾーン
基本概念
利用制限
利用ガイドの推奨事項
自社開発カーネル
カーネル概要
カーネルバージョンのアップデート情報
カーネル最適化バージョン
機能特性
パフォーマンス関連機能
セキュリティカテゴリの機能
安定性機能
分析エンジン特性
カーネル問題のチェックと修復
購入ガイド
課金概要
製品価格
クラスタを作成する
構成変更説明
未払いについての説明
継続支払いの説明
返金ポリシー
従量課金から年/月単位サブスクリプションへの変換
従量課金からServerlessへの変換
付加価値サービスの課金説明
料金請求書の確認
クイックスタート
データベース監査
概要
監査インスタンス一覧
監査サービスを有効化する
監査ログの確認
ログ配信
事後アラーム設定
監査ルールの変更
監査サービスを変更する
監査サービスを停止する
監査ルールテンプレート
監査タスクの照会
サブユーザーへのデータベース監査利用権限付与
Serverlessサービス
Serverless入門
サーバーレス版クラスタの作成と管理
伸縮性スケーリング管理ツール
Serverlessリソースパック
マルチAZデプロイ
設定を変更する
よくあるご質問
Serverlessコスト見積ツール
操作ガイド
操作概要
コンソールでのクラスタページビューの切り替え
データベース接続
インスタンス管理
設定を変更する
インスタンス形態管理
クラスタ管理
読み取り専用インスタンス管理 
データベースプロキシ
アカウント管理
DMC
DMC(データベース管理ツール)
パラメータ設定
マルチAZデプロイ
グローバルデータベース
バックアップとリストア
操作ログ
データマイグレーション
パラレルクエリ
列ストレージインデックス CSI
分析エンジン
データベースセキュリティと暗号化
モニタリングとアラーム
SQLの基本操作
以下のコマンドを実行して、TDSQL-C for MySQLに接続してログインします
Tag
実践チュートリアル
TDSQL-C for MySQL データベース監査の等級保護実践
非InnoDBテーブル問題のワンクリック移行検出処理方法
DTSによるデータベースバージョンのアップグレード MySQL 5.7から8.0へ
TDSQL-C for MySQL 使用規範
新版コンソール
データベースプロキシの複数接続アドレスによる複数ROグループの実現
データベースプロキシのメリット
ストレージの課金モードの選び方
DTSによるリモートディザスタリカバリの構築
クラスタ用VPCの作成
データ復旧の方法
CPU使用率の高騰問題の解決方法
サブユーザーへの監視データ閲覧権限付与方法
ホワイトペーパー
セキュリティホワイトペーパー
性能ホワイトペーパー
トラブルシューティング
接続関連
性能関連
よくあるご質問
基本概念
購入と課金
サポートされるフォーマット
接続とネットワーク
機能特性
コンソールの操作
データベーステーブル
パフォーマンスとログ
データベース監査
TDSQL-C for MySQLとTencentDB for MySQLの違い
関連契約
SLA
利用規約
TDSQL-C ポリシー
プライバシーポリシー
データ処理と安全プロトコル
汎用参考
標準と認証
用語一覧
お問い合わせ

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

PDF
フォーカスモード
フォントサイズ
最終更新日: 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型はサポートされません。

ヘルプとサポート

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

フィードバック