すべてのプロダクト
Search
ドキュメントセンター

PolarDB:LIST DEFAULT HASH

最終更新日:Apr 21, 2026

このトピックでは、LIST DEFAULT HASH パーティションテーブルを作成および変更する方法について説明します。

背景情報

PolarDB は、同じレベルで LIST パーティショニングと HASH パーティショニングを組み合わせたハイブリッドパーティショニング戦略をサポートしています。このモデルでは、データはまず一連の LIST パーティションに対して評価されます。定義された LIST 値に一致しないデータは、デフォルトパーティションに配置されます。このデフォルトパーティションがサブパーティション化されている場合、HASH 関数によってデータがサブパーティションに分散されます。このアプローチは、LIST 値が不均等に分散している場合や、考えられるすべての値を列挙することが非現実的なユースケースに最適です。LIST DEFAULT HASH

制限事項

  • ご利用のクラスターは、次のいずれかのバージョン要件を満たす必要があります。クラスターのバージョンを確認するには、「クラスターのバージョンの表示」をご参照ください。

    • PolarDB for MySQL 8.0.1、リビジョンバージョン 8.0.1.1.34 以降。

    • PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.2.1 以降。

  • パーティションレベルで 1 つ以上のデフォルトパーティションがサポートされています。

  • サブパーティションには LIST と DEFAULT の組み合わせを使用できますが、各パーティションは 1 つのデフォルトサブパーティションのみをサポートします。

  • パーティションにデフォルトパーティションが 1 つしかない場合、すべてのタイプのサブパーティションがサポートされます。

  • パーティションに複数のデフォルトパーティションがある場合、HASH または KEY サブパーティションのみがサポートされます。

LIST DEFAULT HASH パーティションテーブルの作成

構文

PolarDB では、指定された LIST パーティションに一致しないデータをデフォルトパーティションに格納するパーティションテーブルを作成できます。このパーティションが大きくなりすぎた場合は、HASH メソッドを使用して複数のパーティションに分割できます。

CREATE TABLE [ schema. ]table_name
 table_definition
   PARTITION BY LIST [COLUMNS] (expr)
   SUBPARTITION BY ...
   (list_partition_definition[, ..., list_partition_definition],
    default_partition_definition
   )

default_partition_definition は次のとおりです。

PARTITION partition_name DEFAULT [PARTITIONS number]

各パーティション定義にはサブパーティションを含めることもできます。LIST DEFAULT はサブパーティションでもサポートされており、次のように定義されます。

SUBPARTITION subpartition_name DEFAULT

Parameter Description

パラメーター

説明

table_name

作成するテーブルの名前。

partition_name

  • デフォルトパーティションが 1 つしかない場合、このパラメーターはパーティションの名前を指定します。名前はテーブル内で一意である必要があります。

  • 複数のデフォルトパーティションがある場合、このパラメーターはパーティションの名前のプレフィックスを指定します。最終的なパーティション名は、このプレフィックスにシーケンス番号を追加して形成されます。

subpartition_name

サブパーティションの名前。名前はテーブル内で一意である必要があります。各パーティションには、最大で 1 つのデフォルトサブパーティションを持つことができます。

number

HASH メソッドを使用してデフォルトパーティションから作成するパーティションの数を指定します。PARTITIONS number 句はオプションです。この句を省略すると、単一のデフォルトパーティションが作成されます。

次の例は、単一のデフォルトパーティションを作成する方法を示しています。

CREATE TABLE list_default (
  a INT,
  b INT
)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT);

次の例は、複数のデフォルトパーティションを作成する方法を示しています。

CREATE TABLE list_default_hash (
  a INT,
  b INT
)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT PARTITIONS 3);

次の例は、パーティションキーのデータ型が VARCHAR の場合に LIST COLUMNS を使用する方法を示しています。

CREATE TABLE t_goods
(
  country   VARCHAR(30),
  year      VARCHAR(60),
  goods     TEXT
) PARTITION BY LIST COLUMNS(country)
(
  PARTITION p1 VALUES IN ('China'),
  PARTITION p2 VALUES IN ('USA'),
  PARTITION p3 VALUES IN ('Asia'),
  PARTITION p4 VALUES IN ('Singapore'),
  PARTITION p_deft DEFAULT PARTITIONS 5
);

EXPLAIN 文を使用してパーティションを表示します。

EXPLAIN SELECT * FROM list_default_hash;

出力は次のとおりです。

+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table             | partitions        | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | list_default_hash | p0,p1,pd0,pd1,pd2 | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | NULL  |
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set (0.04 sec)

次の例は、サブパーティションに LIST DEFAULT を使用する方法を示しています。

CREATE TABLE test (a int, b int)
PARTITION BY RANGE(a)
SUBPARTITION BY LIST(b) (
PARTITION part0 VALUES LESS THAN (10)
( SUBPARTITION sub0 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub1 DEFAULT),
PARTITION part1 VALUES LESS THAN (20)
( SUBPARTITION sub2 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub3 DEFAULT),
PARTITION part2 VALUES LESS THAN (30)
( SUBPARTITION sub4 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub5 DEFAULT));

パーティションに複数のデフォルトパーティションがある場合、HASH または KEY サブパーティションのみがサポートされます。

CREATE TABLE list_default_hash_sub (
  a INT,
  b INT
)
PARTITION BY LIST (a)
SUBPARTITION BY HASH (b) SUBPARTITIONS 20
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT PARTITIONS 3);

LIST DEFAULT HASH パーティションテーブルの変更

LIST DEFAULT HASH パーティションは、ALTER TABLE ADD PARTITIONALTER TABLE DROP PARTITIONALTER TABLE REORGANIZE PARTITIONALTER TABLE TRUNCATE PARTITIONALTER TABLE EXCHANGE PARTITIONALTER TABLE OPTIMIZE PARTITIONALTER TABLE REBUILD PARTITIONALTER TABLE REPAIR PARTITIONALTER TABLE ANALYZE PARTITIONALTER TABLE CHECK PARTITION などの操作をサポートしています。

このトピックでは、ALTER TABLE ADD PARTITIONALTER TABLE DROP PARTITION、および ALTER TABLE REORGANIZE PARTITION の使用方法について説明します。LIST DEFAULT HASH パーティションテーブルを変更するその他の操作については、「パーティションテーブルの変更」をご参照ください。

ALTER TABLE ADD PARTITION

  • ADD DEFAULT PARTITION

    構文

    デフォルトパーティションのない標準の LIST パーティションテーブルの場合、ADD PARTITION 文を使用してデフォルトパーティションを追加できます。これにより、テーブルは LIST DEFAULT HASH パーティションテーブルに変換されます。

    ALTER TABLE table_name ADD PARTITION(default_partition_definition)

    次の例は、単一のデフォルトパーティションを追加する方法を示しています。

    CREATE TABLE list_tab (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10)
    );
    ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT);

    次の例は、2 つのデフォルトパーティションを追加する方法を示しています。

    CREATE TABLE list_tab (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10)
    );
    ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT PARTITIONS 2);
  • ADD LIST PARTITION

    PolarDB for MySQL 8.0.2.2.11 以降では、ALTER TABLE ADD PARTITION 文で WITHOUT VALIDATION オプションを使用して、LIST DEFAULT HASH パーティションテーブルに LIST パーティションを追加できます。

    新しい LIST パーティションの値がデフォルトパーティションにまだ存在しないことを確認する必要があります。存在する場合は、ALTER TABLE REORGANIZE PARTITION 文を使用して、データをデフォルトパーティションから新しい LIST パーティションに移動します。

    構文

    ALTER TABLE table_name ADD PARTITION(
      list_partition_definition[, ..., list_partition_definition])
    WITHOUT VALIDATION

    新しい LIST パーティションを追加します。

    CREATE TABLE list_default_hash (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10),
     PARTITION pd DEFAULT PARTITIONS 3);
    
    ALTER TABLE list_default_hash ADD PARTITION(
      PARTITION p2 VALUES IN (11,12,13)
    )WITHOUT VALIDATION;

    実行後、LIST パーティション p2list_default_hash テーブルに追加され、p2 にはデータが含まれません。

    説明

    デフォルトパーティションに列 a の値 11、12、および 13 が含まれていないことを確認してください。含まれている場合、新しい LIST パーティションを追加した後、これらの行にアクセスできなくなる可能性があります。

ALTER TABLE DROP PARTITION

DROP PARTITION 構文の詳細については、「DROP PARTITION」をご参照ください。

DROP PARTITION 操作を使用する場合、すべてのデフォルトパーティションを一度に削除する必要があります。デフォルトパーティションの一部だけを削除することはできません。

DROP PARTITION コマンドを実行して、すべてのパーティションを削除します。

ALTER TABLE list_default_hash DROP PARTITION pd0,pd1,pd2;
Query OK, 0 rows affected (0.33 sec)
Records: 0  Duplicates: 0  Warnings: 0

エラーメッセージ

デフォルトパーティションの一部のみを削除しようとすると、エラーが発生します。

ALTER TABLE list_default_hash DROP PARTITION pd0;

コマンドは次のエラーメッセージを返します。

ERROR 8078 (HY000): DROP PARTITION cannot be used on default partitions of LIST DEFAULT, except once dropping all default partitions

ALTER TABLE REORGANIZE PARTITION

REORGANIZE PARTITION 構文の詳細については、「REORGANIZE PARTITION」をご参照ください。

REORGANIZE PARTITION 操作を使用する場合、すべてのデフォルトパーティションを一度に変更する必要があります。デフォルトパーティションの一部だけを変更することはできません。

  • REORGANIZE PARTITION を使用して、デフォルトパーティションの数を変更します。

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      pd0,pd1
    INTO(
      PARTITION pd DEFAULT PARTITIONS 3);

    この文を実行すると、デフォルトパーティションの数が 2 から 3 に変更されます。

  • REORGANIZE PARTITION を使用して、デフォルトパーティションから新しい LIST パーティションを分割します。

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      pd0,pd1
    INTO (
     PARTITION p2 VALUES IN (20,21),
     PARTITION pd DEFAULT PARTITIONS 2);

    この文は、p2 という名前の新しい LIST パーティションをテーブルに追加し、VALUES IN (20,21) に一致する行をデフォルトパーティションから p2 に移動します。

  • REORGANIZE PARTITION を使用して、LIST パーティションをデフォルトパーティションにマージします。

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      p2, pd0, pd1
    INTO (
     PARTITION pd DEFAULT PARTITIONS 2);

    この文は、LIST パーティション p2 をデフォルトパーティションにマージします。

  • REORGANIZE PARTITION を使用して、デフォルトパーティションから値を移動して LIST パーティションを拡張します。

    ALTER TABLE list_default_hash
    REORGANIZE partition
      p2, pd0, pd1
    INTO (
      PARTITION p2 VALUES IN (20,21,22,23,24),
      PARTITION pd DEFAULT PARTITIONS 4);

    この文は、p2 の定義を PARTITION p2 VALUES IN (20,21) から PARTITION p2 VALUES IN (20,21,22,23,24) に変更します。また、対応するデータをデフォルトパーティションから p2 に移動します。

関連トピック

LIST DEFAULT HASH パーティショニングを選択する状況