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

Al unirse a una tabla muy pequeña/vacía, ¿por qué MySQL realiza un escaneo completo a pesar de que estoy usando LIMIT?

El optimizador de MySQL decidirá primero el orden/método de unión y luego comprobará si, para el orden de unión elegido, es posible evitar la clasificación mediante el uso de un índice. Para la consulta lenta en esta pregunta, el optimizador ha decidido utilizar la combinación Block-Nested-Loop (BNL).

BNL suele ser más rápido que usar un índice cuando una de las tablas es muy pequeña (y no hay LÍMITE).

Sin embargo, con BNL, las filas no vendrán necesariamente en el orden dado por la primera tabla. Por lo tanto, el resultado de la combinación debe ordenarse antes de aplicar el LÍMITE.

Puede desactivar BNL mediante set optimizer_switch = 'block_nested_loop=off';