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.