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

Wydajność MySQL na stole z 6 milionami wierszy

Chcesz się upewnić, że zapytanie użyje TYLKO indeksu, więc upewnij się, że indeks obejmuje wszystkie wybrane pola. Ponadto, ponieważ jest to zapytanie o zakres, musisz mieć venid jako pierwszy w indeksie, ponieważ jest on pytany jako stała. Dlatego utworzyłbym i zindeksowałbym tak:

ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);

Dzięki temu indeksowi wszystkie informacje potrzebne do wykonania zapytania znajdują się w indeksie. Oznacza to, że miejmy nadzieję, że silnik pamięci masowej jest w stanie pobrać informacje bez faktycznego szukania w samej tabeli. Jednak MyISAM może nie być w stanie tego zrobić, ponieważ nie przechowuje danych w liściach indeksów, więc możesz nie uzyskać pożądanego wzrostu prędkości. Jeśli tak jest, spróbuj utworzyć kopię tabeli i użyj na kopii silnika InnoDB. Powtórz te same kroki i sprawdź, czy uzyskasz znaczny wzrost prędkości. InnoDB robi przechowuj wartości pól w liściach indeksu i zezwól na pokrycie indeksów.

Miejmy nadzieję, że podczas wyjaśniania zapytania zobaczysz następujące informacje:

mysql> EXPLAIN SELECT date, time FROM events WHERE venid='47975' AND date>='2009-07-11' ORDER BY date;

id  select_type table  type  possible_keys        key       [..]  Extra
1   SIMPLE   events range date_idx, indexNameHere indexNameHere   Using index, Using where


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wysyłanie haseł przez Internet

  2. Amazon EC2, mysql przerywa start, ponieważ InnoDB:mmap (x bajtów) nie powiodło się; errno 12

  3. Przekonwertować schemat MySQL na Github Wiki?

  4. Importuj kontener data.sql MySQL Docker

  5. Jak inkrementować w SQL za pomocą wyzwalacza?