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
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 sugerenciaPQ/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
yHASH_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 tablaT2
tiene el mismo efecto que especificarNO_HASH_JOIN_PROBING
para la tablaT1
.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
yHASH_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 tablaT2
tiene el mismo efecto que especificarNO_HASH_JOIN_BUILDING
para la tablaT1
.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.