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

Jak w MySQL zbudować indeks, aby przyspieszyć to zapytanie?

Aby naprawdę udzielić odpowiedzi, przydatne byłoby sprawdzenie, czy masz już istniejące indeksy, ale...

Wszystko to przy założeniu, że tabela „t” istnieje i musisz dodać indeks, a obecnie masz tylko jeden indeks w swoim kluczu podstawowym lub w ogóle nie ma indeksów.

Indeks pokrywający dla zapytania zapewni najlepszą wydajność dla Twoich potrzeb, ale w przypadku dowolnego indeksu poświęcisz pewną prędkość wstawiania. To, jak ważne jest to poświęcenie, zależy od profilu Twojej aplikacji. Jeśli czytasz głównie z tabeli, nie ma to większego znaczenia. Jeśli masz tylko kilka indeksów, nawet umiarkowane obciążenie zapisu nie będzie miało znaczenia. W grę może też wchodzić ograniczona ilość miejsca na Twoje stoły... Musisz dokonać ostatecznej oceny kompromisu i czy jest on zauważalny. Dobrą rzeczą jest to, że to dość stały hit. Zazwyczaj dodanie indeksu nie spowalnia wstawiania wykładniczo, tylko liniowo.

Niezależnie od tego, oto opcje najlepszej wybranej wydajności:

  1. Jeżeli kluczem podstawowym dla tabeli t jest c3, nie możesz zrobić nic lepszego w zapytaniu, aby przyspieszyć je za pomocą indeksu.
  2. Zakładając, że kluczem głównym t jest c1:

    ALTER TABLE t ADD INDEX covering_index (c3,c2);  
    
  3. Jeśli c1 nie jest twoim pk (i nie jest c2), użyj tego:

    ALTER TABLE t ADD INDEX covering_index (c3,c2,c1);  
    
  4. Jeśli c2 jest twoim PK, użyj tego:

    ALTER TABLE t ADD INDEX covering_index (c3,c1);  
    
  5. Jeśli problemem jest miejsce na dysku lub szybkość wstawiania, możesz wykonać indeks punktów. Poświęcisz trochę wydajności, ale jeśli wkładasz dużo, może to być właściwa opcja:

    ALTER TABLE t ADD INDEX a_point_index (c3);  
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Widelec czy nie widelec?

  2. Zrozumienie struktury rekordów MyISAM

  3. MySQL — połączenie INSERT, VALUES i SELECT?

  4. Czy MySQL external_key_checks wpływa na całą bazę danych?

  5. Ciągłe przesyłanie strumieniowe losowego dźwięku z bazy danych