Dando seguimento ao post anterior sobre particionamento de tabelas no MySQL, este post explica um passo a mais: subparticionamento.
O MySQL permite que você particione uma partição, onde o primeiro nível (PARTITION) é definido por uma expressão de particionamento, e o nível inferior (SUBPARTITION) é definido por outra.
Para utilizar o subparticionamento, é necessário seguir duas restrições:
- O tipo de particionamento (PARTITION) precisa ser dos tipos RANGE ou LIST;
- O tipo de particionamento (SUBPARTITION) precisa ser dos tipos HASH ou INDEX.
Portanto, não é possível subparticionar tabelas particionadas por HASH ou INDEX.
É importante notar que o número total de partições de uma tabela (nº de PARTITIONs * nº de SUBPARTITIONs) não pode ultrapassar 1024, que é o máximo que o MySQL suporta. Ex.: se uma tabela é particionada por RANGE em 2 partições, cada partição pode ser subparticionada em 512, pois 2 * 512 = 1024.
Abaixo segue um exemplo de tabela subparticionada:
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 );
No exemplo acima a tabela ts possui 3 partições, e cada uma é subparticionada em 2 partições. Assim, temos 6 partições no total.
Veja outro exemplo:
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 ), PARTITION p2 VALUES LESS THAN MAXVALUE ( SUBPARTITION s3, SUBPARTITION s4 ) );
Neste outro exemplo, a tabela ts tem 5 partições no total, pois as partições p0 e p2 são subparticionadas em 2 partições cada, mas a partição p1 tem apenas uma subpartição.
Para saber mais sobre o subparticionamento em MySQL, consulte a documentação oficial do MySQL sobre subparticionamento.