Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przy dołączaniu do bardzo małej/pustej tabeli, dlaczego MySQL wykonuje pełne skanowanie, mimo że używam LIMIT?

Optymalizator MySQL najpierw zdecyduje o kolejności/metodzie złączenia, a następnie sprawdzi, czy dla wybranej kolejności złączenia można uniknąć sortowania za pomocą indeksu. W przypadku powolnego zapytania w tym pytaniu optymalizator zdecydował się na użycie złączenia Block-Nested-Loop (BNL).

BNL jest zwykle szybsze niż użycie indeksu, gdy jedna z tabel jest bardzo mała (i nie ma limitu).

Jednak w przypadku BNL wiersze niekoniecznie będą pojawiać się w kolejności podanej w pierwszej tabeli. Dlatego wynik łączenia musi zostać posortowany przed zastosowaniem LIMITu.

Możesz wyłączyć BNL, set optimizer_switch = 'block_nested_loop=off';



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj daty w komórce Excela w klauzuli BETWEEN w zapytaniu SQL

  2. PHP + MYSQL na Duplicate KEY nadal zwiększają INDEX KEY

  3. Ruby mysql2 wiele instrukcji w jednym zapytaniu

  4. Dodawanie statycznego prefiksu do rosnącej liczby

  5. MYSQL Inner Dołącz do dwóch tabel za pomocą dwóch kluczy