Todos os produtos
Search
Central de documentação

PolarDB:Verifique se um IMCI foi criado para uma tabela em uma instrução SQL

Última atualização: Jun 28, 2026

Antes de executar uma consulta no PolarDB for MySQL, use dbms_imci.check_columnar_index() para verificar se todas as colunas referenciadas na consulta possuem um In-Memory Column Index (IMCI) válido. O procedimento retorna as colunas sem cobertura IMCI, o que permite identificar exatamente quais tabelas precisam de um IMCI antes que a consulta possa se beneficiar da aceleração do mecanismo colunar.

  • Se alguma coluna referenciada não possuir um IMCI válido, o procedimento retornará o nome do banco de dados, da tabela e da coluna para cada item sem cobertura.

  • Caso todas as colunas referenciadas tenham um IMCI válido, o procedimento retornará um conjunto de resultados vazio.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Um cluster PolarDB for MySQL executando uma das seguintes versões:

    • PolarDB for MySQL 8.0.1, versão de revisão 8.0.1.1.30 ou posterior

    • PolarDB for MySQL 8.0.2, versão de revisão 8.0.2.2.12 ou posterior

  • Permissão SELECT nas tabelas referenciadas na instrução SQL

Sintaxe

dbms_imci.check_columnar_index('<query_string>');

Parâmetros

Parâmetro

Descrição

query_string

A instrução SQL a ser analisada. Deve ser uma string literal, não uma variável ou resultado de consulta.

O parâmetro query_string deve ser uma instrução SELECT válida. Instruções INSERT, UPDATE, DELETE e outras instruções DML não são suportadas. Se a instrução SELECT contiver um erro (por exemplo, uma coluna inexistente), o procedimento retornará uma mensagem de erro em vez de um conjunto de resultados.

Observações de uso

  • O stored procedure diferencia maiúsculas de minúsculas.

  • Se a instrução SQL incluir um nome de tabela totalmente qualificado (por exemplo, db_name.table_name), o procedimento usará o banco de dados especificado. Caso nenhum banco de dados esteja prefixado, execute use db_name para alternar para o banco de dados correto antes de chamar o procedimento.

  • Não há limite explícito para o comprimento da instrução SQL, mas ele é restrito pelos parâmetros thread_stack (usado durante a análise sintática do SQL) e max_allowed_packet.

  • Se o tipo de dados de uma coluna não for compatível com o IMCI, o procedimento retornará um erro ao ser chamado.

  • O parâmetro query_string pode assumir a forma parametrizada de uma prepared statement, mas a sintaxe PREPARE...FROM não é suportada.

  • Use caracteres de escape para delimitadores de string conforme a sintaxe do MySQL:

    • Ao usar aspas simples, substitua ' por '':

      call dbms_imci.check_columnar_index('select t1.a from t1 where t1.b = ''some_string''');
    • Ao usar aspas duplas, substitua " por "":

      call dbms_imci.check_columnar_index("select t1.a from t1 where t1.b = ""some_string""");

Exemplos

Os exemplos a seguir usam três tabelas no banco de dados test. A tabela t3 tem o IMCI ativado via comment 'columnar=1', enquanto t1 e t2 não possuem essa configuração.

Defina as tabelas de teste:

use test;

create table t1 (a int, b int) engine = innodb;
create table t2 (a int, b int) engine = innodb;
create table t3 (a int, b int) engine = innodb comment 'columnar=1';

Verifique uma consulta com junção de tabelas sem IMCI

call dbms_imci.check_columnar_index('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b');

Resultado:

+--------------+------------+-------------+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME |
+--------------+------------+-------------+
| test         | t1         | a           |
| test         | t1         | b           |
| test         | t2         | a           |
+--------------+------------+-------------+
3 rows in set (0.01 sec)

Cada linha no resultado identifica uma coluna sem IMCI válido:

  • TABLE_SCHEMA: banco de dados que contém a coluna

  • TABLE_NAME: tabela que contém a coluna

  • COLUMN_NAME: nome da coluna

A consulta referencia t1.a, t1.b e t2.a, mas nenhuma dessas colunas possui um IMCI. Para habilitar a aceleração IMCI nesta consulta, crie um IMCI em t1 e t2 e execute esta verificação novamente para confirmar a cobertura total.

Verifique uma consulta em uma tabela com IMCI

call dbms_imci.check_columnar_index('select a, b from t3');

Resultado:

Empty set (0.00 sec)

Todas as colunas referenciadas na consulta (t3.a e t3.b) possuem um IMCI válido. Portanto, a consulta está apta a receber aceleração do mecanismo colunar.