STRAIGHT_JOIN
force l'ordre de jointure des tables, donc table1
est scanné dans la boucle externe et table2
dans la boucle interne.
L'optimiseur n'est pas parfait (bien qu'il soit encore assez décent), et la cause la plus probable est les statistiques obsolètes.
Non, uniquement lorsque l'optimiseur est erroné. Cela peut se produire si la distribution de vos données est fortement faussée ou ne peut pas être calculée correctement (par exemple, pour les index spatiaux ou de texte intégral).
Vous devez collecter les statistiques, élaborer des plans dans les deux sens et comprendre ce que signifient ces plans.
Si vous voyez cela :
-
Le plan généré automatiquement n'est pas optimal et ne peut pas être amélioré par les moyens standards,
-
Le
STRAIGHT_JOIN
la version est meilleure, vous comprenez qu'elle le sera toujours et comprenez pourquoi ça le fera toujours
, puis utilisez STRAIGHT_JOIN
.