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

Indeksowanie MySQL i używanie sortowania plików

W pierwszym zapytaniu ORDER BY odbywa się za pomocą views_point INDEX, ponieważ został użyty w części WHERE zapytania, a zatem w MySQL może służyć do sortowania.

W drugim zapytaniu MySQL rozwiązuje część WHERE przy użyciu innego indeksu, listing_pcs . Nie można tego użyć do spełnienia warunku ORDER BY. MySQL używa sortowania plików, co jest najlepszą opcją, jeśli nie można użyć indeksu.

MySQL używa indeksów do sortowania tylko wtedy, gdy indeks jest taki sam, jak użyty w warunku WHERE. To jest instrukcja oznacza:

Więc co możesz zrobić:

  1. Spróbuj zwiększyć swój sort_buffer_size opcja konfiguracji, aby sortowanie plików było jak najbardziej efektywne. Duże wyniki, które są zbyt duże dla bufora sortowania, powodują, że MySQL dzieli sortowanie na kawałki, co jest wolniejsze.

  2. Zmuś MySQL do wybrania innego indeksu. Warto zauważyć, że różne wersje MySQL w różny sposób wybierają domyślne indeksy. Na przykład wersja 5.1 jest dość zła, ponieważ Optymalizator zapytań został znacznie przepisany w tym wydaniu i wymagał wielu poprawek. Wersja 5.6 jest całkiem dobra.

    SELECT *
    FROM listings
    FORCE INDEX (views_point)
    WHERE (`publishedon_hourly` BETWEEN
           UNIX_TIMESTAMP( '2015-09-5 00:00:00' )
           AND UNIX_TIMESTAMP( '2015-09-5 12:00:00' ))
      AND (published =1)
      AND cat_id IN ( 1, 2, 3, 4, 5 )
    ORDER BY `views_point` DESC
    LIMIT 10
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pole formularza HTML nie wypełnia wartości PHP po pierwszej spacji

  2. mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows itd... oczekuje, że parametr 1 będzie zasobem

  3. MySQL One-to-Many do formatu JSON

  4. jak przechowywać typ daty java do typu daty mysql?

  5. Grupa MySQL według kolejnych wierszy