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

Optymalizacja zapytania mysql w celu użycia indeksu do sortowania

Uważam, że zapytanie, które masz, prawdopodobnie pasuje do dużego odsetka danych w tabeli. W takich sytuacjach optymalizator MySQL często decyduje się na skanowanie tabeli i całkowite ignorowanie indeksów, ponieważ jest to w rzeczywistości szybsze niż zadawanie się z dodatkowym odczytem całego indeksu i używanie go do pobrania danych. Więc w tym przypadku zgaduję, że public_private='yes' and approved='yes' pasuje do sporej części twojego stołu. Dlatego też, jeśli MySQL pomija z tego powodu używanie indeksu, nie jest on również dostępny do sortowania.

Jeśli naprawdę chcesz, aby korzystał z indeksu, rozwiązaniem byłoby użycie FORCE INDEX :

select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;

Przeprowadziłbym jednak kilka testów, aby upewnić się, że to, co otrzymujesz, jest faktycznie szybsze niż to, co wybrał optymalizator MySQL. Najwyraźniej optymalizator ma pewne problemy z dokonywaniem wyborów do zamówienia, więc z pewnością możesz spróbować i zobaczyć, czy uzyskasz lepszą wydajność.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grupowanie daty i godziny MySQL w interwały niezależnie od strefy czasowej

  2. Aliasowanie nazw pól w modelu SQLAlchemy lub bazowej tabeli SQL

  3. Konwertuj kolumnę varchar na datę w mysql na poziomie bazy danych

  4. Funkcja strtotime() PHP jest nieprawidłowa o 1 godzinę?

  5. Wyszukaj MySQL i zamień tekst w polu