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

Jak zoptymalizować zapytania MySQL w oparciu o plan EXPLAIN

Zależy od tego, do czego dążysz i jakie jest zapytanie.

Ogólnie rzecz biorąc, dla każdego wiersza w EXPLAIN, który ma Using where , musisz mieć to za pomocą indeksu (possible keys i keys kolumna). To są twoje filtry i obejmują GDZIE i WŁĄCZ. Mówiąc Using index jest jeszcze lepszy. Oznacza to, że istnieje indeks pokrywający, a MySQL może pobierać dane bezpośrednio z indeksu, zamiast odwiedzać wiersz w tabeli danych.

Linie, w których nie ma Using where i zwraca dużą liczbę wierszy. Są to wartości zwracane dla wszystkich wierszy w tabeli. Nie wiem, jakie jest twoje zapytanie, więc nie wiem, czy mam się tu niepokoić. Spróbuj przefiltrować zestaw wyników, aby zmniejszyć rozmiar i poprawić wydajność.

Generalnie powinieneś unikać oglądania Using filesort lub Using temporary , chociaż są one złe tylko wtedy, gdy się ich nie spodziewasz.

Filesort zwykle pojawia się z klauzulą ​​ORDER. Generalnie chcesz, aby MySQL używał indeksu pokrywającego (Using index ), aby wiersze zostały zwrócone już w kolejności z serwera. Jeśli tak nie jest, MySQL musi je później zamówić, używając sortowania plików.

Using temporary może być zły, gdy odnosi się do tabel pochodnych, ponieważ nie mają indeksów. Wygląda na to, że jawnie utworzyłeś tabelę tymczasową z indeksami, więc tutaj nie jest źle. Czasami jedynym wyborem jest użycie tabeli pochodnej, a zatem Using temporary .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UTWÓRZ TYP na MySQL

  2. FIND_IN_SET z wieloma wartościami

  3. python mysql.connector DictCursor?

  4. (potrzebujesz porady) Porozmawiaj z bazą danych serwera MySQL z mojej aplikacji na Androida

  5. Typ danych MySQL DECIMAL