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

Zapytanie o wydajność MySQL

Można by pomyśleć, że to zapytanie wykonuje podzapytanie tylko raz, zachowuje wynik, a następnie porównuje go z wierszami w zapytaniu zewnętrznym. Ale tak nie jest w przypadku MySQL. MySQL ma lukę w inteligencji swojego optymalizatora, więc traktuje podzapytanie jako podzapytanie zależne i wykonuje go ponownie dla każdej odrębnej wartości zapytania zewnętrznego.

Aby to naprawić, przenieś podzapytanie do klauzuli FROM jako tabelę pochodną. Wykona podzapytanie raz i zachowa wynik jako wewnętrzną tabelę tymczasową. Następnie dołącz do drugiej instancji tabeli.

SELECT `ID`, `CountryCode`, `Name`, `District`, `Population`
FROM `City`
JOIN (
    SELECT `CountryCode`, MAX(`Population`) AS `Population`
    FROM `City`
    GROUP BY `CountryCode`
) AS _max USING (`CountryCode`, `Population`);

Powinieneś także mieć indeks City nad dwiema kolumnami (CountryCode,Population) w tej kolejności, aby zapytanie GROUP BY mogło działać wydajnie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kopia zapasowa bazy danych mysql za pomocą mysqldump

  2. Czytanie częściowych danych json za pomocą MySQL i PHP

  3. Top N na grupę z wieloma połączeniami tabel

  4. Zapytanie MySQL o listę wartości

  5. Kompilacja NSIS - mysql nie jest rozpoznawany jako działający program - Dlaczego instrukcja NsExec::ExecToLog nie działa?