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

Lors de la connexion à une table très petite/vide, pourquoi MySQL effectue-t-il une analyse complète malgré le fait que j'utilise LIMIT ?

L'optimiseur MySQL décidera d'abord de l'ordre/de la méthode de jointure, puis vérifiera si, pour l'ordre de jointure choisi, il est possible d'éviter le tri en utilisant un index. Pour la requête lente de cette question, l'optimiseur a décidé d'utiliser la jointure Block-Nested-Loop (BNL).

BNL est généralement plus rapide que d'utiliser un index lorsque l'une des tables est très petite (et qu'il n'y a pas de LIMITE).

Cependant, avec BNL, les lignes ne viendront pas nécessairement dans l'ordre donné par la première table. Par conséquent, le résultat de la jointure doit être trié avant d'appliquer la LIMITE.

Vous pouvez désactiver BNL en set optimizer_switch = 'block_nested_loop=off';