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 |
|
|
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, ejecuteuse db_namepara 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 pormax_allowed_packet.Si el tipo de datos de una columna no es compatible con IMCI, el procedimiento devuelve un error al llamarlo.
query_stringpuede ser la forma parametrizada de una sentencia preparada, pero la sintaxisPREPARE...FROMno 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""");
Para obtener una lista completa de reglas de escape, consulte Literales de cadena de MySQL.
-
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 columnaTABLE_NAME: la tabla que contiene la columnaCOLUMN_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.