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.