Ao criar uma tabela no PolarDB for MySQL, ative índices de coluna em memória (IMCIs) durante a criação adicionando COLUMNAR=1 ao campo COMMENT. Essa abordagem evita a sobrecarga de executar ALTER TABLE em tabelas grandes posteriormente. O PolarDB for MySQL oferece suporte a três variantes de CREATE TABLE, cada uma com comportamentos diferentes para IMCI.
Pré-requisitos
Antes de começar, verifique se você possui:
Nós de armazenamento colunar somente leitura adicionados ao cluster. Consulte Adicionar um nó de armazenamento colunar somente leitura
Endpoint de cluster configurado para distribuição de solicitações. Consulte Visão geral da distribuição de solicitações
Conexão com o cluster por meio do endpoint de cluster. Consulte Conectar-se a um cluster
Funcionamento da criação de IMCI nas variantes de CREATE TABLE
Todos os três métodos utilizam a anotação COLUMNAR=1 no campo COMMENT. A tabela abaixo resume o escopo e as limitações de cada método para ajudar na escolha da opção adequada antes da escrita da instrução DDL.
|
Método |
Escopo do IMCI |
Suporte a IMCI por coluna |
|
|
Coluna única ou todas as colunas |
Sim |
|
|
Herdado da tabela source (automático) |
Não aplicável |
|
|
Apenas todas as colunas |
Não |
Criar um IMCI com CREATE TABLE
Adicione COLUMNAR=1 ao campo COMMENT de uma coluna específica para indexá-la ou adicione-o ao COMMENT no nível da tabela para indexar todas as colunas suportadas simultaneamente.
Indexar colunas específicas:
CREATE TABLE t1(
col1 INT COMMENT 'COLUMNAR=1',
col2 DATETIME COMMENT 'COLUMNAR=1',
col3 VARCHAR(200)
) ENGINE InnoDB;
Esse comando cria IMCIs em col1 e col2. A coluna col3 não possui IMCI.
Indexar todas as colunas:
CREATE TABLE t2(
col1 INT,
col2 DATETIME,
col3 VARCHAR(200)
) ENGINE InnoDB COMMENT 'COLUMNAR=1';
Essa ação cria IMCIs em todas as colunas cujos tipos de dados oferecem suporte — neste caso, col1, col2 e col3.
COLUMNARnão diferencia maiúsculas de minúsculas. Nenhum delimitador é necessário entreCOLUMNAR=1e qualquer conteúdo existente noCOMMENT, e a anotação não afeta esse conteúdo existente.
Tipos de dados suportados
É possível criar IMCIs na maioria dos tipos de dados de coluna. Os tipos a seguir receberam suporte em versões específicas do PolarDB for MySQL:
|
Tipo de dado |
Versão mínima |
|
BLOB, TEXT |
8.0.1.1.25 |
|
ENUM |
8.0.1.1.28 |
|
Tabelas particionadas |
8.0.1.1.29 |
|
BIT, JSON, Geo |
8.0.1.1.30 |
Não é possível criar IMCIs em colunas do tipo de dado SET.
Criar um IMCI com CREATE TABLE LIKE
Quando uma tabela source possui um IMCI, a tabela de destino herda automaticamente o mesmo IMCI — nenhuma anotação adicional é necessária.
-- If source_table has an IMCI, dest_table inherits the same IMCI.
CREATE TABLE dest_table LIKE source_table;
Criar um IMCI com CREATE TABLE ... SELECT
Adicione COLUMNAR=1 ao COMMENT no nível da tabela para criar IMCIs em todas as colunas da nova tabela, incluindo quaisquer colunas adicionadas posteriormente. Essa sintaxe não oferece suporte à criação de IMCI por coluna.
CREATE TABLE t3(
col1 INT,
col2 DATETIME,
col3 VARCHAR(200)
) ENGINE InnoDB;
CREATE TABLE t4 COMMENT 'COLUMNAR=1' SELECT col1, col2 FROM t3;
A tabela t4 recebe IMCIs em col1, col2 e em quaisquer colunas adicionadas posteriormente.
Verificar a estrutura do IMCI
Execute SHOW CREATE TABLE <tablename> FULL para confirmar a criação dos IMCIs. O comando padrão SHOW CREATE TABLE mostra apenas a configuração do campo COMMENT — ele não exibe os detalhes do IMCI.
SHOW CREATE TABLE test.t2;
Saída — os detalhes do IMCI não são mostrados:
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`col1` int(11) DEFAULT NULL,
`col2` datetime DEFAULT NULL,
`col3` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='COLUMNAR=1'
SHOW CREATE TABLE test.t2 FULL;
Saída — os detalhes do IMCI aparecem no campo COLUMNAR INDEX:
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`col1` int(11) DEFAULT NULL,
`col2` datetime DEFAULT NULL,
`col3` varchar(200) DEFAULT NULL,
COLUMNAR INDEX (`col1`,`col2`,`col3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='COLUMNAR=1'
Próximos passos
Para adicionar IMCIs a tabelas existentes, consulte a documentação do ALTER TABLE.
Para gerenciar e monitorar IMCIs, consulte a visão geral de gerenciamento de IMCI.