sql >> Databasteknik >  >> RDS >> Mysql

När du går med i ett mycket litet/tomt bord, varför gör MySQL en fullständig genomsökning trots att jag använder LIMIT?

MySQL-optimeraren bestämmer först anslutningsordning/-metod och kontrollerar sedan om det för den valda kopplingsordningen är möjligt att undvika sortering genom att använda ett index. För den långsamma frågan i denna fråga har optimeraren beslutat att använda Block-Nested-Loop (BNL) join.

BNL är vanligtvis snabbare än att använda ett index när en av tabellerna är mycket liten (och det inte finns någon LIMIT).

Men med BNL kommer raderna inte nödvändigtvis att komma i den ordning som ges av den första tabellen. Därför måste resultatet av sammanfogningen sorteras innan LIMIT tillämpas.

Du kan stänga av BNL genom att set optimizer_switch = 'block_nested_loop=off';



  1. SQL Server ARITHABORT

  2. Distribuera Postgres-databas på azure Container Instance?

  3. Visa Mysql-tabellfältvärden i rutan Välj

  4. mysql minuter till timmar och minuter