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

MySQL:kolumny o niskiej kardynalności/selektywności =jak indeksować?

Indeks, który opisujesz, jest praktycznie bezcelowy. Indeks najlepiej sprawdza się, gdy trzeba wybrać mały liczba wierszy w porównaniu do łącznej liczby wierszy.

Powodem tego jest sposób, w jaki baza danych uzyskuje dostęp do tabeli. Tabele można oceniać za pomocą pełnego skanu tabeli, w którym każdy blok jest kolejno odczytywany i przetwarzany. Lub przez wiersz lub wyszukiwanie klucza, gdzie baza danych ma klucz/wierd i odczytuje dokładnie ten wiersz, którego wymaga.

W przypadku użycia klauzuli WHERE opartej na kluczu podstawowym lub innym unikalnym indeksie, np. where id = 1 , baza danych może użyć indeksu, aby uzyskać dokładne odniesienie do miejsca przechowywania danych wiersza. Jest to wyraźnie bardziej wydajne niż pełne skanowanie tabeli i przetwarzanie każdego bloku.

Wracając do twojego przykładu, masz klauzulę where o where status = 'enabled' , indeks zwróci 150 mln wierszy, a baza danych będzie musiała odczytać każdy wiersz po kolei za pomocą oddzielnych małych odczytów. Podczas gdy dostęp do tabeli z pełnym skanowaniem tabeli umożliwia bazie danych korzystanie z bardziej wydajnych, większych odczytów.

W pewnym momencie lepiej jest po prostu wykonać pełne skanowanie tabeli niż używać indeksu. Z mysql możesz użyć FORCE INDEX (idx_name) jako część zapytania, aby umożliwić porównania między każdą metodą dostępu do tabeli.

Odniesienie:http://dev .mysql.com/doc/refman/5.5/en/jak-unikać-skanowania-tabeli.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Ograniczenie liczby otrzymanych wyników na podstawie wartości kolumny | Łączenie zapytań

  2. MySQL pobiera ostatni rekord dla grupy

  3. Próbuję wykonać LOAD DATA INFILE za pomocą REPLACE i AUTO_INCREMENT

  4. Wstaw MySQL ON DUPLICATE KEY do tabeli audytu lub dziennika

  5. odczyt/zapis danych Unicode w MySql