Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql Performance Query

Бихте си помислили, че тази заявка изпълнява подзаявката само веднъж, запазва резултата и след това го сравнява с редовете във външната заявка. Но това не е случаят с MySQL. MySQL има пропуск в интелигентността на своя оптимизатор, така че третира подзаявката като зависима подзаявка и го изпълнява повторно за всяка отделна стойност на външната заявка.

За да коригирате това, преместете подзаявката в клаузата FROM като производна таблица. Той ще изпълни подзаявката веднъж и ще запази резултата като вътрешна временна таблица. След това се присъединете към другия екземпляр на таблицата.

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`);

Също така трябва да имате индекс за град над двете колони (CountryCode,Population) в този ред, така че заявката GROUP BY да може да се изпълнява ефективно.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Настройте MySQL и Oracle Database Mac OS X

  2. MySQL:Грешка 1628:Коментарът за таблица „клиент“ е твърде дълъг (макс. =60)

  3. изберете произволна стойност въз основа на вероятността

  4. Разлика в MySQL между два реда от оператор SELECT

  5. UTF8 работен поток PHP, обобщен MySQL