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

Optymalizacja zapytań dotyczących użycia indeksu MySQL

Kilka rzeczy... Miałbym POJEDYNCZY indeks złożony na (a_id, job, state, start_time )

Ma to pomóc zoptymalizować zapytanie według wszystkich kryteriów, w tym, co uważam za najlepiej dostrojoną sekwencję. Pojedyncze "A_ID", potem dwa zadania, mały zakres stanów, potem czas. Następnie zauważ, że nie ma cudzysłowów... Wygląda na to, że konwertowałeś porównania liczbowe na ciągi znaków, zostaw je jako liczbowe do porównania - szybciej niż ciągi.

Ponadto dzięki temu, że wszystkie są częścią indeksu, jest to indeks COVERING, co oznacza, że ​​NIE musi przechodzić do nieprzetworzonych danych strony, aby uzyskać inne wartości w celu przetestowania kwalifikujących się rekordów do uwzględnienia lub nie.

SELECT 
      count(*) AS tries 
   FROM 
      tasks
   WHERE 
          a_id = 614
      AND job IN ( 1, 3 ) 
      AND state > 80 AND state < 100 
      AND start_time >= 1386538013;

Teraz, dlaczego indeks... Rozważmy następujący scenariusz. Masz dwa pokoje, które mają pudełka... W pierwszym pokoju każde pudełko jest „a_id”, w ramach którego znajdują się zadania w kolejności, w każdym zadaniu są zakresy stanów, a na końcu według czasu rozpoczęcia.

W innym pokoju twoje pudełka są sortowane według czasu rozpoczęcia, w tym a_id są sortowane, a na końcu według stanu.

Który byłby łatwiejszy do znalezienia tego, czego potrzebujesz. Tak powinieneś myśleć o indeksach. Wolałbym przejść do jednego pola dla „A_ID =614”, a następnie przejść do Zadania 1 i drugiego dla Zadania 3. W ramach każdego Zadania 1, Zadania 3, weź 80-100, a następnie czas. Jednak znasz lepiej swoje dane i objętość w każdym kryterium i możesz się dostosować.

Na koniec count(ID) vs count(*). Jedyne, na czym mi zależy, to rekordowa kwalifikacja. Nie muszę znać rzeczywistego identyfikatora, ponieważ kryteria filtrowania zostały już zakwalifikowane jako uwzględnianie lub nie, po co szukać (w tym przypadku) rzeczywistego „identyfikatora”.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uporządkować według daty (varchar)?

  2. Kod błędu MySQL 1235

  3. jak używać funkcji kanonicznych w Entity Framework i Mysql

  4. Jak mogę uzyskać liczbę klientów dziennie według unikalnego i powtarzającego się klienta w określonym terminie?

  5. Połącz tabele w dwóch bazach danych za pomocą SQLAlchemy