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

Wydajność MYSQL jest niska przy użyciu sortowania plików

Problem polega na tym, że MySQL używa tylko jednego indeksu podczas wykonywania zapytania. Jeśli dodasz nowy indeks, który używa 3 pól z Twojego WHERE klauzula, szybciej znajdzie wiersze.

ALTER TABLE `adverts` ADD INDEX price_status_approved(`price`, `status`, `approved`);

Zgodnie z dokumentacją MySQL ORDER BY Optymalizacja :

Tak dzieje się w twoim przypadku. Jako wynik EXPLAIN mówi nam, że optymalizator używa klucza price znaleźć wiersze. Jednak ORDER BY znajduje się w polu date_updated który nie należy do klucza price .

Aby szybciej znaleźć wiersze ORAZ szybciej je posortować, musisz dodać indeks, który zawiera wszystkie pola użyte w WHERE oraz w ORDER BY klauzule:

ALTER TABLE `adverts` ADD INDEX status_approved_date_updated(`status`, `approved`, `date_updated`);

Pole używane do sortowania musi znajdować się na ostatniej pozycji w indeksie. Nie ma sensu dołączać price w indeksie, ponieważ warunek użyty w zapytaniu zwróci zakres wartości.

Jeśli EXPLAIN nadal pokazuje, że używa sortowania plików, możesz spróbować zmusić MySQL do użycia wybranego indeksu:

SELECT adverts.*
FROM adverts
FORCE INDEX(status_approved_date_updated)
WHERE price >= 0
AND adverts.status = 1
AND adverts.approved = 1
ORDER BY date_updated DESC 
LIMIT 19990, 10

Zwykle nie jest konieczne wymuszanie indeksu, ponieważ optymalizator MySQL najczęściej dokonuje właściwego wyboru. Ale czasami to zły lub nie najlepszy wybór. Będziesz musiał przeprowadzić kilka testów, aby sprawdzić, czy poprawia to wydajność, czy nie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLSTATE[HY000]:Błąd ogólny:1298 Nieznana lub niepoprawna strefa czasowa:okna „UTC”

  2. Jaki jest maksymalny rozmiar MySQL VARCHAR?

  3. Wyklucz niektóre wartości podczas dzielenia stałej wartości na kraje na podstawie dziennego udziału w przychodach

  4. Sprawdzasz tabelę pod kątem nakładania się czasu?

  5. Jak poprawnie używać PHP do kodowania obiektu MySQL do formatu JSON?