

# Sugerencias de Aurora MySQL
<a name="AuroraMySQL.Reference.Hints"></a><a name="hints"></a>

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](https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html) (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\$1PQ**  
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.  
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\$1JOIN, NO\$1HASH\$1JOIN**  
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\$1JOIN\$1PROBING, NO\$1HASH\$1JOIN\$1PROBING**  
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\$1JOIN\$1BUILDING, NO\$1HASH\$1JOIN\$1BUILDING**  
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\$1FIXED\$1ORDER**  
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 MySQL[JOIN\$1FIXED\$1ORDER](https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html). 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\$1ORDER**  
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\$1ORDER](https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html). 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\$1PREFIX**  
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\$1PREFIX](https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html). 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\$1SUFFIX**  
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\$1SUFFIX](https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html). 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](AuroraMySQL.BestPractices.Performance.md#Aurora.BestPractices.HashJoin).