Sugerencias de Aurora MySQL - Amazon Aurora

Sugerencias de Aurora MySQL

Puede utilizar consejos de SQL con consultas de Aurora MySQL para ajustar el rendimiento. También puede utilizar sugerencias para evitar que los planes de ejecución de consultas importantes cambien en función de condiciones impredecibles.

sugerencia

Para comprobar el efecto que tiene una sugerencia en una consulta, examine el plan de consulta producido por la instrucción EXPLAIN. Compare los planes de consulta con y sin la sugerencia.

En Aurora MySQL versión 3, puede utilizar todas las sugerencias disponibles en MySQL Community Edition 8.0. Para obtener detalles sobre estas sugerencias, consulte Optimizer Hints (Sugerencias del optimizador) en el Manual de referencia de MySQL.

Las siguientes sugerencias están disponibles en Aurora MySQL versión 2. Estas sugerencias se aplican a consultas que utilizan la característica de combinación hash de Aurora MySQL versión 2, especialmente a consultas que utilizan la optimización de consultas paralelas.

PQ, NO_PQ

Especifica si se debe obligar al optimizador a utilizar consultas paralelas por tabla o por consulta.

PQ obliga al optimizador a utilizar una consulta paralela para las tablas especificadas o para toda la consulta (bloque). NO_PQ impide que el optimizador utilice consultas paralelas para tablas especificadas o para toda la consulta (bloque).

Esta sugerencia está disponible en Aurora MySQL 2.11 y versiones posteriores. En los siguientes ejemplos se muestra cómo usar esta sugerencia.

nota

Al especificar un nombre de tabla, el optimizador se ve obligado a aplicar la sugerencia PQ/NO_PQ solo en las tablas seleccionadas. Si no se especifica un nombre de tabla, se aplicará la sugerencia PQ/NO_PQ a todas las tablas afectadas por el bloque de consulta.

EXPLAIN SELECT /*+ PQ() */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ PQ(t1) */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ PQ(t1,t2) */ f1, f2 FROM num1 t1, num1 t2 WHERE t1.f1 = t2.f21; EXPLAIN SELECT /*+ NO_PQ() */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ NO_PQ(t1) */ f1, f2 FROM num1 t1 WHERE f1 > 10 and f2 < 100; EXPLAIN SELECT /*+ NO_PQ(t1,t2) */ f1, f2 FROM num1 t1, num1 t2 WHERE t1.f1 = t2.f21;
HASH_JOIN, NO_HASH_JOIN

Activa o desactiva la capacidad del optimizador de consultas paralelas de elegir si desea usar el método de optimización de combinación hash para una consulta. HASH_JOIN permite al optimizador usar la combinación hash si ese mecanismo es más eficiente. NO_HASH_JOIN impide que el optimizador utilice la combinación hash para la consulta. Esta sugerencia está disponible en Aurora MySQL versión 2.08 y versiones posteriores. No tiene efecto en Aurora MySQL versión 3.

En los siguientes ejemplos se muestra cómo usar esta sugerencia.

EXPLAIN SELECT/*+ HASH_JOIN(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ NO_HASH_JOIN(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
HASH_JOIN_PROBING, NO_HASH_JOIN_PROBING

En una consulta de combinación hash, especifica si se va a utilizar la tabla especificada para el lado de sondeo de la combinación. La consulta comprueba si los valores de columna de la tabla de compilación existen en la tabla de sondeo, en lugar de leer todo el contenido de la tabla de sondeo. Puede utilizar HASH_JOIN_PROBING y HASH_JOIN_BUILDING para especificar cómo se procesan las consultas de combinación hash sin reordenar las tablas dentro del texto de la consulta. Esta sugerencia está disponible en Aurora MySQL versión 2.08 y versiones posteriores. No tiene efecto en Aurora MySQL versión 3.

En los siguientes ejemplos se muestra cómo usar esta sugerencia. Especificar la sugerencia HASH_JOIN_PROBING para la tabla T2 tiene el mismo efecto que especificar NO_HASH_JOIN_PROBING para la tabla T1.

EXPLAIN SELECT /*+ HASH_JOIN(t2) HASH_JOIN_PROBING(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ HASH_JOIN(t2) NO_HASH_JOIN_PROBING(t1) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
HASH_JOIN_BUILDING, NO_HASH_JOIN_BUILDING

En una consulta de combinación hash, especifica si se va a utilizar la tabla especificada para el lado de compilación de la combinación. La consulta procesa todas las filas de esta tabla para crear la lista de valores de columna para hacer referencia cruzada con la otra tabla. Puede utilizar HASH_JOIN_PROBING y HASH_JOIN_BUILDING para especificar cómo se procesan las consultas de combinación hash sin reordenar las tablas dentro del texto de la consulta. Esta sugerencia está disponible en Aurora MySQL versión 2.08 y versiones posteriores. No tiene efecto en Aurora MySQL versión 3.

En el siguiente ejemplo se muestra cómo usar esta sugerencia. Especificar la sugerencia HASH_JOIN_BUILDING para la tabla T2 tiene el mismo efecto que especificar NO_HASH_JOIN_BUILDING para la tabla T1.

EXPLAIN SELECT /*+ HASH_JOIN(t2) HASH_JOIN_BUILDING(t2) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1; EXPLAIN SELECT /*+ HASH_JOIN(t2) NO_HASH_JOIN_BUILDING(t1) */ f1, f2 FROM t1, t2 WHERE t1.f1 = t2.f1;
JOIN_FIXED_ORDER

Especifica que las tablas de la consulta se unen en función del orden en que aparecen en la consulta. Es útil con consultas que afectan a tres o más tablas. Sirve de reemplazo para la sugerencia de MySQL STRAIGHT_JOIN y es equivalente a la sugerencia de MySQLJOIN_FIXED_ORDER. Esta sugerencia está disponible en Aurora MySQL versión 2.08 y versiones posteriores.

En el siguiente ejemplo se muestra cómo usar esta sugerencia.

EXPLAIN SELECT /*+ JOIN_FIXED_ORDER() */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_ORDER

Especifica el orden de combinación de las tablas de la consulta. Es útil con consultas que afectan a tres o más tablas. Es equivalente a la sugerencia de MySQL JOIN_ORDER. Esta sugerencia está disponible en Aurora MySQL versión 2.08 y versiones posteriores.

En el siguiente ejemplo se muestra cómo usar esta sugerencia.

EXPLAIN SELECT /*+ JOIN_ORDER (t4, t2, t1, t3) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_PREFIX

Especifica las tablas que se van a poner primero en el orden de combinación. Es útil con consultas que afectan a tres o más tablas. Es equivalente a la sugerencia de MySQL JOIN_PREFIX. Esta sugerencia está disponible en Aurora MySQL versión 2.08 y versiones posteriores.

En el siguiente ejemplo se muestra cómo usar esta sugerencia.

EXPLAIN SELECT /*+ JOIN_PREFIX (t4, t2) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);
JOIN_SUFFIX

Especifica las tablas que se van a poner en último lugar en el orden de combinación. Es útil con consultas que afectan a tres o más tablas. Es equivalente a la sugerencia de MySQL JOIN_SUFFIX. Esta sugerencia está disponible en Aurora MySQL versión 2.08 y versiones posteriores.

En el siguiente ejemplo se muestra cómo usar esta sugerencia.

EXPLAIN SELECT /*+ JOIN_SUFFIX (t1) */ f1, f2 FROM t1 JOIN t2 USING (id) JOIN t3 USING (id) JOIN t4 USING (id);

Para obtener información sobre el uso de consultas de combinación hash, consulte Optimización de grandes consultas combinadas de Aurora MySQL con combinaciones hash.