sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué STRAIGHT_JOIN mejora drásticamente esta consulta y qué significa cuando se escribe después de la palabra clave SELECT?

STRAIGHT_JOIN fuerza el orden de unión de las tablas, por lo que table1 se escanea en el bucle exterior y table2 en el bucle interior.

El optimizador no es perfecto (aunque sigue siendo bastante decente) y la causa más probable son las estadísticas obsoletas.

No, solo cuando el optimizador está mal. Esto puede ocurrir si la distribución de sus datos está muy sesgada o no se puede calcular correctamente (por ejemplo, para índices espaciales o de texto completo).

Debe recopilar las estadísticas, crear los planes para ambos sentidos y comprender qué significan estos planes.

Si ves eso:

  1. El plan generado automáticamente no es óptimo y no se puede mejorar de forma estándar,

  2. El STRAIGHT_JOIN la versión es mejor, entiendes que siempre lo hará y entiendes por qué siempre lo hará

, luego usa STRAIGHT_JOIN .