Chame dbms_imci.columnar_advise() ou dbms_imci.columnar_advise_by_columns() para gerar a instrução DDL necessária à criação de um In-Memory Columnar Index (IMCI) para uma consulta específica. Ambos os stored procedures retornam apenas as instruções DDL, sem executá-las. Após executar o DDL retornado, repita o processo caso alguma coluna ainda esteja inválida, até que todas as colunas envolvidas na consulta tenham um IMCI válido.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster PolarDB for MySQL 8.0.1 com versão de revisão 8.0.1.1.30 ou posterior
Permissão selecione na tabela de destino
Procedimentos
Escolha o procedimento conforme a abrangência desejada para o IMCI:
|
Procedimento |
Escopo |
Quando usar |
|
|
Todas as colunas nas tabelas consultadas |
Para cobertura colunar completa em todas as tabelas acessadas pela consulta |
|
|
Apenas as colunas referenciadas na consulta |
Para um IMCI direcionado, limitado às colunas efetivamente usadas pela consulta |
Sintaxe
Obtenha a instrução DDL para criar um IMCI para todas as colunas nas tabelas consultadas:
CALL dbms_imci.columnar_advise('<query_string>');
Obtenha a instrução DDL para criar um IMCI apenas para as colunas específicas referenciadas na consulta:
CALL dbms_imci.columnar_advise_by_columns('<query_string>');
Parâmetros
|
Parâmetro |
Tipo |
Descrição |
|
|
Literal de string |
Instrução SQL a ser analisada. Deve ser uma instrução selecione válida; instruções INSERT, atualize e exclua não são suportadas. O valor deve ser uma literal de string, não uma variável ou resultado de consulta. Se a instrução selecione referenciar uma coluna inexistente, o sistema retornará um erro. |
Exemplos
Os exemplos a seguir usam duas tabelas, t1 e t2, no banco de dados test.
Defina as tabelas de exemplo:
USE test;
CREATE TABLE t1 (a INT, b INT) ENGINE = InnoDB;
CREATE TABLE t2 (a INT, b INT) ENGINE = InnoDB;
Obter DDL para todas as colunas nas tabelas consultadas
Chame dbms_imci.columnar_advise() com a consulta de destino:
CALL dbms_imci.columnar_advise('SELECT COUNT(t1.a) FROM t1 INNER JOIN t2 ON t1.a = t2.a GROUP BY t1.b');
Saída de exemplo:
+-------------------------------------------+
| DDL_STATEMENT |
+-------------------------------------------+
| ALTER TABLE test.t1 COMMENT='COLUMNAR=1'; |
| ALTER TABLE test.t2 COMMENT='COLUMNAR=1'; |
+-------------------------------------------+
2 rows in set (0.00 sec)
A saída contém uma instrução DDL por tabela. Cada instrução ative o IMCI para todas as colunas dessa tabela. Execute essas instruções para crie os IMCIs.
Obter DDL para colunas específicas referenciadas na consulta
Chame dbms_imci.columnar_advise_by_columns() com a mesma consulta:
CALL dbms_imci.columnar_advise_by_columns('SELECT COUNT(t1.a) FROM t1 INNER JOIN t2 ON t1.a = t2.a GROUP BY t1.b');
Saída de exemplo:
+-------------------------------------------------------------------------------------------------------------------------------------------+
| DDL_STATEMENT |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ALTER TABLE test.t1 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1', MODIFY COLUMN b int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; |
| ALTER TABLE test.t2 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; |
+-------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Como a consulta referencia apenas t1.a, t1.b e t2.a, a saída cria IMCIs somente para essas três colunas. Execute essas instruções para ative o IMCI exatamente nas colunas usadas pela consulta.
Iterar até que todas as colunas estejam válidas
Após a execução das instruções DDL, algumas colunas podem permanecer com status de IMCI inválido. Chame novamente o mesmo stored procedure com a mesma consulta para obter instruções DDL atualizadas e execute-as. Repita esse ciclo até que o stored procedure não retorne mais instruções e o IMCI esteja válido para todas as colunas usadas pela consulta.