Use o particionamento KEY quando a chave de partição natural for uma string, data ou coluna composta. Ao contrário do particionamento HASH, que exige uma expressão inteira, o particionamento KEY aceita tipos de colunas não inteiros e chaves de partição com múltiplas colunas, sendo a opção mais adequada para a maioria dos esquemas reais.
O algoritmo de roteamento do particionamento KEY no PolarDB-X usa MurmurHash3, diferente do algoritmo de particionamento KEY do MySQL.
Diferenças entre os particionamentos KEY e HASH
|
Comportamento |
Particionamento KEY |
Particionamento HASH |
|
Chave de partição obrigatória |
Não — omitir a chave de partição usa a chave primária por padrão; na ausência dela, o sistema usa a chave única |
Sim — especifique uma expressão inteira ou coluna |
|
Chaves de partição com múltiplas colunas |
Compatível (chave de partição vetorial) |
Incompatível |
|
Tipos de dados compatíveis |
INT, STRING, DATE, DATETIME (e subtipos) |
Apenas tipos inteiros |
|
Funções de particionamento |
Incompatíveis |
Compatíveis |
Para obter uma comparação completa, consulte Comparação entre particionamento KEY e HASH.
Sintaxe
CREATE TABLE ...
PARTITION BY KEY(partition_column_list)
PARTITIONS number;
partition_column_list:
column_name [, column_name ...]
|
Parâmetro |
Descrição |
|
|
Uma ou mais colunas usadas como chave de partição. Se omitida, o sistema usa a chave primária. Caso não exista chave primária, ele adota a chave única. |
|
|
Número de partições. Máximo: 8.192. |
Exemplos
Chave de partição de coluna única
Crie a tabela particionada pela coluna id em 8 partições:
CREATE TABLE tb_k(
id bigint NOT NULL AUTO_INCREMENT,
bid int,
name varchar(30),
birthday datetime NOT NULL,
PRIMARY KEY(id)
)
PARTITION BY KEY(id)
PARTITIONS 8;
Chave de partição vetorial (múltiplas colunas)
Use bid e id como chave de partição de duas colunas, com 8 partições:
CREATE TABLE tb_k(
id bigint NOT NULL AUTO_INCREMENT,
bid int,
name varchar(30),
birthday datetime NOT NULL,
PRIMARY KEY(id)
)
PARTITION BY KEY(bid, id)
PARTITIONS 8;
Em uma chave de partição vetorial, apenas a primeira coluna (bid neste exemplo) determina a partição de destino da linha. As demais colunas (id) não participam do roteamento e servem para viabilizar a divisão de partições de dados quentes. O pruning de partição ocorre quando a consulta inclui uma condição de igualdade na coluna principal (bid).
Limites
Tipos de dados compatíveis
|
Categoria |
Tipos |
|
Inteiro |
BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, TINYINT UNSIGNED |
|
Data e hora |
DATETIME, DATE, TIMESTAMP |
|
String |
CHAR, VARCHAR, BINARY |
|
Ponto fixo |
DECIMAL (dígitos fracionários devem ser 0) |
Outros limites
O particionamento KEY não oferece suporte a funções de particionamento.
Por padrão, uma tabela particionada pode ter no máximo 8.192 partições.
Uma chave de partição pode incluir até cinco colunas por padrão.
Distribuição de dados
O particionamento KEY emprega o algoritmo MurmurHash3, que apresenta baixas taxas de colisão de hash e alto desempenho. A distribuição entre as partições torna-se equilibrada quando a chave de partição possui mais de 3.000 valores distintos; quanto maior a quantidade de valores distintos, mais uniforme será a distribuição.