10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb


19.2.6サブパティショニング

サブパティショニング(複合パティショニングとも呼ばれます)は,パ。次の创建表ステトメントを検討します。

CREATE TABLE ts (id INT,已购买日期)PARTITION BY RANGE(年份(已购买))SUBPARTITION BY HASH(TO_DAYS(已购买))SUBPARTITIONS 2(分区p0值小于(1990),分区p1值小于(2000),分区p2值小于MAXVALUE);

テブルtsには3の范围パティションがあります。これらの各パティション(p0p1,およびp2)は,さらに2のサブパティションに分割されます。実際には,テブル全体が3 * 2 = 6パティションに分割されます。ただし,分区的范围句のアクションによって,これらの最初の2には购买カラムで値が1990より小さいレコドのみが格納されます。

MySQL 5.6では;范围または列表によってパティション化されたテブルをサブパティション化できます。サブパティショニングには,哈希または关键パティショニングを使用できます。これは,複合パティショニングとも呼ばれます。

注記

SUBPARTITION通过散列およびSUBPARTITION的关键は通常それぞれ,由散列分区および分区的关键と同じ構文規則に従います。これの例外は,SUBPARTITION的关键は現在(分区的关键と異なり)デフォルトカラムをサポートしないことで,この目的に使用されるカラムを指定する必要があります(テーブルに明示的な主キーがある場合でも)。これは既知の問題であり,対処中です。詳細および例にいてはサブパティションに関する問題を参照してください。

SUBPARTITION句を使用して個々のサブパーティションのオプションを指定することによって,サブパーティションを明示的に定義することもできます。たとえば,前の例と同じテブルtsをより冗長な形式で作成するには,次のようにします。

CREATE TABLE ts (id INT,已购买日期)PARTITION BY RANGE(年(已购买))SUBPARTITION BY HASH(TO_DAYS(已购买))(分区p0值小于(1990)(分区s0,分区s1),分区p1值小于(2000)(分区s2,分区s3),分区p2值小于MAXVALUE(分区s4,分区s5));

構文に関するいくかの注意事項を次に示します。

  • 各パティションには,同じ数のサブパティションが必要です。

  • パティション化されたテブルのパティションにSUBPARTITIONを使用してサブパティションを明示的に定義する場合は,それらのすべてを定義する必要があります。言い換えると,次のステトメントは失敗します。

    CREATE TABLE ts (id INT, bought DATE) PARTITION BY RANGE(YEAR(bought)) SUBPARTITION BY HASH(TO_DAYS(bought))(分区p0值小于(1990)(SUBPARTITION s0, SUBPARTITION s1),分区p1值小于(2000),分区p2值小于MAXVALUE (SUBPARTITION s2, SUBPARTITION s3));

    このステトメントは,SUBPARTITIONS 2句を含んでいた場合でも失敗します。

  • SUBPARTITION句には,(少なくとも)サブパティションの名前が含まれている必要があります。それ以外は,サブパーティションに適切なオプションを設定するか,またはそのオプションのデフォルト設定を想定します。

  • サブパティション名はテブル全体で一意である必要があります。たとえば,次の创建表ステトメントはMySQL 5.6で有効です。

    CREATE TABLE ts (id INT,已购买日期)PARTITION BY RANGE(年(已购买))SUBPARTITION BY HASH(TO_DAYS(已购买))(分区p0值小于(1990)(分区s0,分区s1),分区p1值小于(2000)(分区s2,分区s3),分区p2值小于MAXVALUE(分区s4,分区s5));

サブパーティションは,非常に大きいテーブルで,データおよびインデックスを多数のディスクに分散するために使用できます。/ disk0/ disk1/ disk2などとしてマウントされた6個のディスクがあるとします。ここで次の例を検討します。

CREATE TABLE ts (id INT, bought DATE) PARTITION BY RANGE(YEAR(bought)) SUBPARTITION BY HASH(TO_DAYS(bought)) (PARTITION p0 VALUES LESS THAN (1990) (SUBPARTITION s0 DATA DIRECTORY = '/disk0/ DATA ' INDEX DIRECTORY = '/disk0/idx', SUBPARTITION s1 DATA DIRECTORY = '/disk1/ DATA ' INDEX DIRECTORY = '/disk1/idx'), PARTITION p1 VALUES LESS THAN (2000) (SUBPARTITION s2 DATA DIRECTORY = '/disk2/ DATA ' INDEX DIRECTORY = '/disk2/idx',SUBPARTITION s3 DATA DIRECTORY = '/disk3/ DATA ' INDEX DIRECTORY = '/disk3/idx'), PARTITION p2 VALUES LESS THAN MAXVALUE (SUBPARTITION s4 DATA DIRECTORY = '/disk4/ DATA ' INDEX DIRECTORY = '/disk4/idx', SUBPARTITION s5 DATA DIRECTORY = '/disk5/idx');

この場合,各范围のデタおよび。ほかにも多数のバリエションが考えられます。別の例を次に示します。

CREATE TABLE ts (id INT, bought DATE) PARTITION BY RANGE(YEAR(bought)) SUBPARTITION BY HASH(TO_DAYS(bought)) (PARTITION p0 VALUES LESS THAN (1990) (SUBPARTITION s0a DATA DIRECTORY = '/disk0' INDEX DIRECTORY = '/disk1', SUBPARTITION s0b DATA DIRECTORY = '/disk2' INDEX DIRECTORY = '/disk3'), PARTITION p1 VALUES LESS THAN (2000) (SUBPARTITION s1a DATA DIRECTORY = '/disk4/ DATA ' INDEX DIRECTORY = '/disk4/idx',SUBPARTITION s1b DATA DIRECTORY = '/disk5/ DATA ' INDEX DIRECTORY = '/disk5/idx'), PARTITION p2 VALUES小于MAXVALUE (SUBPARTITION s2a, SUBPARTITION s2b));

この場合は,次のように格納されます。

  • 购买日付が1990年より前の行には大きな領域が使用されるため,4に分割され,パティションp0を構成する2の各サブパティション(s0aおよびs0bのデ。言い換えると,次のようになります。

    • サブパティションs0aのデタは/ disk0に格納されます。

    • サブパティションs0aのンデックスは,/ disk1に格納されます。

    • サブパティションs0bのデタは,/ disk2に格納されます。

    • サブパティションs0bのンデックスは,/ disk3に格納されます。

  • 1990年から1999年までの日付(パティションp1)が含まれている行は,1990年より前の行ほどの領域を必要としません。これらは,p0に格納されるレガシレコドの場合の4のディスクではなく,2のディスク(/ disk4および/ disk5に分割されます。

    • p1の最初のサブパティション(s1a)に属するデタおよびンデックスは,/ disk4(デタは/ disk4 /数据,およびおよび/ disk4 idxに格納されます。

    • p1の2番目のサブパティション(印地)に属するデタおよびンデックスは,/ disk5(デタは/ disk5 /数据,およびおよび/ disk5 idxに格納されます。

  • 2000年から現在までの日付(パティション.p2)を反映する行には,前の2の範囲で必要とされたほどの領域は使用されません。現在のところ,これらのすべてをデフォルトの場所に格納しても問題ありません。

    将来,2000年から始まる10年間の購入数が,デフォルトの場所では十分な領域を提供できないほど増えたときには,ALTER TABLE……重组分区ステトメントを使用して対応する行を移動できます。これを行う方法にいては,セクション19.3 "パティション管理"を参照してください。

NO_DIR_IN_CREATEサバSQLモドが有効である場合,数据目录および索引目录オプションはパティション定義で許可されません。MySQL 5.6では;これらのオプションはサブパーティションを定義するときにも許可されません (Bug #42954)。


本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb