Spec-Zone.ru › MySQL 8.4

26.2.6 Подразделение таблиц

Подразделение таблиц (также известное как составное разделение) — это дальнейшее разделение каждой части таблицы в разделяемой таблице. Рассмотрим следующее CREATE TABLE утверждение:

CREATE TABLE ts (id INT, purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) )
    SUBPARTITIONS 2 (
        PARTITION p0 VALUES LESS THAN (1990),
        PARTITION p1 VALUES LESS THAN (2000),
        PARTITION p2 VALUES LESS THAN MAXVALUE
    );

Таблица ts имеет 3 RANGE раздела. Каждый из этих разделов — p0, p1 и p2 — дополнительно разделен на 2 подразделения. В итоге вся таблица разделяется на 3 * 2 = 6 раздела. Однако из-за действия клаузы PARTITION BY RANGE первые 2 из них хранят только те записи, у которых значение в столбце purchased меньше 1990.

Возможна разбивка таблиц, которые разделены по RANGE или LIST. Подразделения могут использовать либо HASH, либо KEY разделение. Это также известно как составное разделение.

Примечание

SUBPARTITION BY HASH и SUBPARTITION BY KEY, как правило, следуют тем же правилам синтаксиса, что и PARTITION BY HASH и PARTITION BY KEY соответственно. Исключением является то, что SUBPARTITION BY KEY (в отличие от PARTITION BY KEY) в настоящее время не поддерживает столбец по умолчанию, поэтому столбец, используемый для этой цели, должен быть указан, даже если таблица имеет явный первичный ключ. Это известная проблема, над которой мы работаем; см. Проблемы с подразделениями для получения дополнительной информации и примера.

Также возможно явно определить подразделения, используя клаузы SUBPARTITION для указания параметров для отдельных подразделений. Например, более подробный способ создания той же таблицы ts, как показано в предыдущем примере, будет:

CREATE TABLE ts (id INT, purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) ) (
        PARTITION p0 VALUES LESS THAN (1990) (
            SUBPARTITION s0,
            SUBPARTITION s1
        ),
        PARTITION p1 VALUES LESS THAN (2000) (
            SUBPARTITION s2,
            SUBPARTITION s3
        ),
        PARTITION p2 VALUES LESS THAN MAXVALUE (
            SUBPARTITION s4,
            SUBPARTITION s5
        )
    );

Некоторые важные моменты синтаксиса приведены здесь:

  • Каждый раздел должен иметь одинаковое количество подразделений.

  • Если вы явно определяете какие-либо подразделения с помощью SUBPARTITION в любом разделе разделяемой таблицы, вы должны определить их все. Другими словами, следующее утверждение не выполняется:

    CREATE TABLE ts (id INT, purchased DATE)
        PARTITION BY RANGE( YEAR(purchased) )
        SUBPARTITION BY HASH( TO_DAYS(purchased) ) (
            PARTITION p0 VALUES LESS THAN (1990) (
                SUBPARTITION s0,
                SUBPARTITION s1
            ),
            PARTITION p1 VALUES LESS THAN (2000),
            PARTITION p2 VALUES LESS THAN MAXVALUE (
                SUBPARTITION s2,
                SUBPARTITION s3
            )
        );
    

    Это утверждение по-прежнему будет ошибочным, даже если оно будет использовать SUBPARTITIONS 2.

  • Каждая клауза SUBPARTITION должна включать (как минимум) имя для подразделения. В противном случае вы можете установить любой желаемый параметр для подразделения или позволить ему принять значение по умолчанию для этого параметра.

  • Имена подразделений должны быть уникальными во всей таблице. Например, следующее CREATE TABLE утверждение является допустимым:

    CREATE TABLE ts (id INT, purchased DATE)
        PARTITION BY RANGE( YEAR(purchased) )
        SUBPARTITION BY HASH( TO_DAYS(purchased) ) (
            PARTITION p0 VALUES LESS THAN (1990) (
                SUBPARTITION s0,
                SUBPARTITION s1
            ),
            PARTITION p1 VALUES LESS THAN (2000) (
                SUBPARTITION s2,
                SUBPARTITION s3
            ),
            PARTITION p2 VALUES LESS THAN MAXVALUE (
                SUBPARTITION s4,
                SUBPARTITION s5
            )
        );
    

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/partitioning-subpartitions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API