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

Zoptymalizuj zapytanie ORDER BY

Istnieje limit optymalizacji, którą można wykonać w klauzulach ORDER BY. Podstawowym, który czasami pomaga, jest indeksowanie właściwego zestawu kolumn we właściwej kolejności. Tak więc, dla twojego przykładu, (pojedynczy, złożony) indeks na:

average_price_per_month ASC, phone_price_guestimate DESC, contract_length ASC

może pomóc, ale optymalizator może nadal zdecydować, że lepiej jest użyć innego indeksu do obsługi terminów filtru w zapytaniu, a następnie sam posortuje wybrane w ten sposób dane. Należy zauważyć, że o ile indeks nie dostarcza danych w dokładnie prawidłowej kolejności posortowania, a użycie indeksu ogólnie przyspiesza zapytanie, optymalizator nie będzie ich używał. Indeks tylko jednej z kolumn do posortowania jest ograniczoną korzyścią dla optymalizatora i zwykle nie używa takiego indeksu.

Jedno pytanie do rozważenia:

  • Jak szybko wykonuje zapytanie bez klauzuli ORDER BY.

Daje to bardzo bezpośredni pomiar kosztów sortowania. Wspominasz 20 ms bez zamawiania i 120 ms z zamawianiem, więc ORDER BY jest umiarkowanie drogi. Następne pytanie może brzmieć:„Czy możesz przewyższyć go w swojej aplikacji?”. Możesz to zrobić, ale pakiet sortowania w DBMS jest zwykle dość dobrze zoptymalizowany i prawdopodobnie będziesz musiał ciężko pracować, aby go pokonać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MySQL Entity Framework — Nie można znaleźć określonego dostawcy sklepu w konfiguracji lub jest on nieprawidłowy

  2. MOD_REWRITE POMOC!

  3. Dynamiczna karta krzyżowa w MySQL

  4. Nieprawidłowe rzutowanie podczas zwracania mysql LAST_INSERT_ID() przy użyciu dapper.net

  5. Java / MySQL - Jak uzyskać dostęp do połączenia z innej klasy?