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 |
|
|
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, executeuse db_namepara 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) emax_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_stringpode assumir a forma parametrizada de uma prepared statement, mas a sintaxePREPARE...FROMnã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""");
Para obter a lista completa de regras de escape, consulte Strings literais do MySQL.
-
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 colunaTABLE_NAME: tabela que contém a colunaCOLUMN_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.