Todos los productos
Search
Centro de documentos

PolarDB:Comprobar si se creó un IMCI para una tabla en una sentencia SQL

Última actualización: Sep 05, 2026

Antes de ejecutar una consulta en PolarDB for MySQL, use dbms_imci.check_columnar_index(). Compruebe que todas las columnas referenciadas en la consulta tienen un In-Memory Column Index (IMCI) válido. El procedimiento devuelve las columnas que no cuentan con cobertura de IMCI. De este modo puede identificar exactamente qué tablas necesitan un IMCI antes de que la consulta pueda aprovechar la ventaja de la aceleración del motor columnar.

  • Si alguna columna referenciada carece de un IMCI válido, el procedimiento devuelve el nombre de la base de datos, el nombre de la tabla y el nombre de la columna de cada columna no cubierta.

  • Si todas las columnas referenciadas tienen un IMCI válido, el procedimiento devuelve un conjunto de resultados vacío.

Requisitos previos

Antes de empezar, asegúrese de que cuenta con:

  • Un clúster de PolarDB for MySQL que ejecute una de las versiones que se indican a continuación:

    • PolarDB for MySQL 8.0.1, versión de revisión 8.0.1.1.30 o posterior

    • PolarDB for MySQL 8.0.2, versión de revisión 8.0.2.2.12 o posterior

  • Permiso SELECT sobre las tablas referenciadas en la sentencia SQL

Sintaxis

dbms_imci.check_columnar_index('<query_string>');

Parámetros

Parámetro

Descripción

query_string

La sentencia SQL que se analizará sintácticamente. Debe ser un literal de cadena, no una variable ni el resultado de una consulta.

query_string debe ser una sentencia SELECT válida. Las sentencias INSERT, UPDATE, DELETE y otras sentencias DML no son compatibles. Si la sentencia SELECT contiene un error (por ejemplo, una columna inexistente), el procedimiento devuelve un mensaje de error en lugar de un conjunto de resultados.

Notas de uso

  • El procedimiento almacenado distingue entre mayúsculas y minúsculas.

  • Si la sentencia SQL incluye un nombre de tabla totalmente cualificado (por ejemplo, db_name.table_name), el procedimiento utiliza la base de datos especificada. Si no se antepone una base de datos, ejecute use db_name para cambiar a la base de datos correcta antes de llamar al procedimiento.

  • La longitud de la sentencia SQL no tiene un límite explícito, pero está restringida por el parámetro thread_stack (que se usa durante el análisis sintáctico de SQL) y por max_allowed_packet.

  • Si el tipo de datos de una columna no es compatible con IMCI, el procedimiento devuelve un error al llamarlo.

  • query_string puede ser la forma parametrizada de una sentencia preparada, pero la sintaxis PREPARE...FROM no es compatible.

  • Aplique escape a los caracteres que entren en conflicto con el delimitador de cadena según la sintaxis de MySQL:

    • Cuando use comillas simples, reemplace ' con '':

      call dbms_imci.check_columnar_index('select t1.a from t1 where t1.b = ''some_string''');
    • Cuando use comillas dobles, reemplace " con "":

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

Ejemplos

Los ejemplos que se muestran a continuación utilizan tres tablas en la base de datos test. t3 tiene IMCI habilitado mediante comment 'columnar=1'; t1 y t2 no lo tienen.

Configure las tablas de prueba:

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';

Comprobar una consulta que une tablas sin 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 fila del resultado identifica una columna que carece de un IMCI válido:

  • TABLE_SCHEMA: la base de datos que contiene la columna

  • TABLE_NAME: la tabla que contiene la columna

  • COLUMN_NAME: el nombre de la columna

La consulta referencia t1.a, t1.b y t2.a, y ninguna de estas columnas tiene un IMCI. Habilite la aceleración de IMCI para esta consulta: cree un IMCI en t1 y en t2 y, a continuación, vuelva a ejecutar esta comprobación y confirme la cobertura completa.

Comprobar una consulta sobre una tabla con IMCI

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

Resultado:

Empty set (0.00 sec)

Todas las columnas referenciadas en la consulta (t3.a y t3.b) tienen un IMCI válido. La consulta es apta para la aceleración del motor columnar.