Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi STRAIGHT_JOIN améliore-t-il si radicalement cette requête, et qu'est-ce que cela signifie lorsqu'il est écrit après le mot-clé SELECT ?

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 :

  1. Le plan généré automatiquement n'est pas optimal et ne peut pas être amélioré par les moyens standards,

  2. 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 .