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.