Spec-Zone.ru › MySQL 9.2

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 из них хранят только те записи, у которых значение меньше 1990 в столбце purchased.

Можно подразделить таблицы, которые разделены по 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-9.2-en/partitioning-subpartitions.html

Spec-Zone.ru

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