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:
-
El plan generado automáticamente no es óptimo y no se puede mejorar de forma estándar,
-
El
STRAIGHT_JOIN
la versión es mejor, entiendes que siempre lo hará y entiendes por qué siempre lo hará
, luego usa STRAIGHT_JOIN
.