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

Czy w MySQL wprowadzenie SELECT foo zwiększa wydajność, jeśli foo jest indeksowane?

Pierwszą rzeczą, o której należy pamiętać, jest to, że MySQL używa tylko jednego indeksu na pseudo-SELECT (nie na instrukcję) - kiedy przeglądasz wynik SELECT za pomocą EXPLAIN, zobaczysz, który indeks został wybrany dla. EXPLAIN można uruchomić tylko na SELECTS, więc musimy założyć, że DELETE/UPDATE używa tego samego planu, gdy zamieniasz składnię na SELECT...

Większość baz danych (osadzone mogą być dziwne) według mojej wiedzy obsługuje indeksy w następujących klauzulach:

  • WYBIERZ
  • DOŁĄCZ (składnia ANSI-92)
  • GDZIE (ponieważ istnieje zarówno ANSI-89 i filtrowanie tutaj)
  • HAVING (odpowiednik WHERE, ale w przeciwieństwie do WHERE - umożliwia agregowanie użycia bez konieczności podzapytania)
  • ZAMÓW PRZEZ

Nie jestem w 100% na GROUP BY, więc na razie go pomijam.

Ostatecznie jest to wybór optymalizatorów, których użyć, w oparciu o jego algorytm i statystyki, które ma pod ręką. Możesz użyć składni TABELA ANALIZY aby odświeżyć statystyki (okresowo, a nie ciągle).

Uzupełnienie

MySQL ogranicza również ilość miejsca przeznaczonego na przydzielanie indeksów - 1000 bajtów dla tabel MyISAM i 767 bajtów dla tabel InnoDB . Ponieważ MySQL używa tylko jednego indeksu na pseudo-SELECT, pokrycie indeksów (indeksów zawierających więcej niż jedną kolumnę) jest dobrym pomysłem, ale tak naprawdę chodzi o testowanie najczęstszych zapytań i optymalizację pod kątem jak najlepiej. Priorytet indeksowania powinien być następujący:

  1. Klucz podstawowy (gdzieś w wersji 5, tworzenie indeksu dla pk stało się automatyczne)
  2. Klucze obce (kolejny najprawdopodobniej kandydat DOŁĄCZ
  3. )
  4. Kryteria filtrowania (zakładając, że masz miejsce)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie klauzuli IN w MySQL z określonymi wartościami

  2. sumowanie aktywnych rekordów w codeigniter

  3. Jak zmienić wszystkie prefiksy tabeli w jednym zapytaniu?

  4. STR_TO_DATE() Przykłady – MySQL

  5. MySQL wybierz sumę z grupowaniem według i pustymi wartościami