Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Ao ingressar em uma tabela muito pequena/vazia, por que o MySQL faz uma varredura completa apesar de estar usando LIMIT?


O otimizador do MySQL decidirá primeiro sobre a ordem/método de junção e, em seguida, verificará se, para a ordem de junção escolhida, é possível evitar a classificação usando um índice. Para a consulta lenta nesta questão, o otimizador decidiu usar a junção Block-Nested-Loop (BNL).

O BNL geralmente é mais rápido do que usar um índice quando uma das tabelas é muito pequena (e não há LIMIT).

No entanto, com BNL, as linhas não virão necessariamente na ordem dada pela primeira tabela. Portanto, o resultado da junção precisa ser classificado antes de aplicar o LIMIT.

Você pode desativar o BNL set optimizer_switch = 'block_nested_loop=off';