Obecně řečeno, ne. Dvoustavové pole nezrychluje dotazy při indexování, protože se musíte v průměru podívat na polovinu řádků. Chcete, aby vaše položky rejstříku byly selektivní – daná položka v rejstříku by měla představovat pouze malé procento možných hodnot (řekněme méně než 10 %, nejlépe ve zlomcích procenta). Pak použití indexu ignoruje většinu dat v tabulce, což vám přináší výhodu výkonu.
Některé DBMS podporují bitmapové indexy. Mohou pomoci, ale stále narážíte na problém selektivity.
Aktualizovaná otázka říká, že počet hodnot s hodnotou 1 bude malý (méně než jedno procento); přinese vám index nyní výhodu?
Odpověď zní:
-
Pro ty dotazy, kde zadáte, že hodnota je 1, pak ano, index ve sloupci může poskytnout výhodu za předpokladu, že optimalizátor index skutečně využívá. Možná budete muset vyladit DBMS, aby si uvědomil, že index je zkreslený ve prospěch jeho použití s dotazy, kde je hodnota 1; to má tendenci být specifické pro DBMS, ale aktualizace statistik v různých podobách je název hry, možná také pomocí nápověd v dotazech SQL. Samozřejmě, že pokud optimalizátor index nikdy nepoužívá, pak to stále neposkytuje žádnou výhodu – a optimalizátor se může rozhodnout, že mu jiné indexy nějakým způsobem pomohou více.
-
U dotazů, kde je hodnota 0, by se index neměl používat. Je však pravděpodobné, že DBMS bude i nadále udržovat index pro hodnoty 0 – i když by je nikdy neměl používat. Byl by to neobvyklý DBMS, který by mohl mít příkaz „indexovat tento sloupec pouze pro hodnoty jiné než nula“, i když by to bylo velmi prospěšné.
Takže - záleží. Záleží na dotazech a záleží na optimalizátoru.
Všimněte si také, že složený index - na některých dalších běžně používaných sloupcích a poté bitové pole může poskytnout určitou výhodu. Pokud tedy téměř vždy vybíráte v rozsahu dat, pak by vám složený index ve sloupcích data a bitových polí (pravděpodobně v tomto pořadí) měl poskytnout dobrý index.