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

indeksuj pole bitowe w MYSQL

Ogólnie rzecz biorąc, nie. Pole dwustanowe nie przyspiesza zapytań po zindeksowaniu, ponieważ trzeba przeglądać średnio połowę wierszy. Chcesz, aby wpisy indeksu były selektywne — dany wpis w indeksie powinien reprezentować tylko niewielki procent możliwych wartości (powiedzmy mniej niż 10%, najlepiej w ułamkach procentowych). Następnie użycie indeksu ignoruje większość danych w tabeli, co daje korzyści w zakresie wydajności.

Niektóre DBMS obsługują indeksy bitmapowe. Mogą pomóc, ale nadal napotykasz problem selektywności.

Zaktualizowane pytanie mówi, że liczba wartości o wartości 1 będzie niewielka (mniej niż jeden procent); czy indeks przyniesie teraz korzyści?

Odpowiedź brzmi:

  • W przypadku zapytań, w których określono wartość 1, to tak, indeks w kolumnie może przynieść korzyści, pod warunkiem, że optymalizator faktycznie korzysta z indeksu. Być może będziesz musiał dostosować DBMS, aby zdał sobie sprawę, że indeks jest przekrzywiony na korzyść używania go z zapytaniami, w których wartość wynosi 1; zwykle jest to specyficzne dla DBMS, ale aktualizowanie statystyk w różnych postaciach to nazwa gry, prawdopodobnie przy użyciu wskazówek w zapytaniach SQL. Oczywiście, jeśli optymalizator nigdy nie używa indeksu, to nadal nie przynosi żadnych korzyści — a optymalizator może zdecydować, że inne indeksy w jakiś sposób mu bardziej pomagają.

  • W przypadku zapytań, w których wartość wynosi 0, nie należy używać indeksu. Istnieje jednak szansa, że ​​DBMS będzie nadal utrzymywał indeks dla wartości 0 - nawet jeśli nigdy nie powinien ich używać. Byłby to nietypowy DBMS, któremu można by nakazać „indeksuj tę kolumnę tylko dla wartości innych niż zero”, chociaż byłoby to bardzo korzystne.

A więc – to zależy. Zależy to od zapytań i od optymalizatora.

Zauważ też, że indeks złożony - w niektórych innych zwyczajowo używanych kolumnach, a następnie w polu bitowym, może przynieść pewne korzyści. Tak więc, jeśli prawie zawsze wybierasz zakres dat, to złożony indeks w kolumnach daty i pól bitowych (prawdopodobnie w tej kolejności) powinien zapewnić dobry indeks.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. skopiuj dane z bazy mysql do innej bazy mysql za pomocą java

  2. MySQL średnia liczba godzin między utworzonymi datami i godzinami w określonym przedziale czasu

  3. GeoDjango i MySQL:punkty nie mogą być NULL, jakiej innej pustej wartości powinienem użyć?

  4. MySQL znajduje nieużywane tabele

  5. Nie mogę używać funkcji mysql_* po aktualizacji PHP