sql >> Databáze >  >> RDS >> Oracle

B-Strom vs bitmapové databázové indexy

Z wikipedie:B-stromy a indexy bitmap . Případy použití:

  • B-stromy jsou typickým typem indexu používaným při CREATE INDEX ... v databázi:

    1. Jsou velmi rychlé, když vyberete jen malou velmi podmnožinu dat indexu (obvykle max. 5 % až 10 %)
  • Fungují lépe, když máte hodně odlišných indexovaných hodnot.
  • Je možné kombinovat několik indexů B-Stromu, ale jednodušší přístupy jsou často efektivnější.
  • Nejsou užitečné, pokud je pro indexovaná data málo odlišných hodnot nebo když chcete získat velkou (obvykle> 10 %) podmnožinu dat.
  • Každý index B-Stromu ukládá malou penalizaci při vkládání/aktualizaci hodnot v indexované tabulce. To může být problém, pokud máte hodně indexů ve velmi zaneprázdněné tabulce.

  • Tyto vlastnosti činí indexy B-Tree velmi užitečnými pro urychlení vyhledávání v aplikacích OLTP, když pracujete s velmi malými datovými sadami najednou, většina dotazů se filtruje podle ID a chcete dobrý současný výkon.

  • Bitmapové indexy jsou specializovanější variantou indexu:

    1. Zakódují indexované hodnoty jako bitmapy, a proto jsou velmi prostorově úsporné.
    2. Mají tendenci fungovat lépe, když je k dispozici málo různých indexovaných hodnot
    3. Optimalizátory DB mohou velmi snadno kombinovat několik indexovaných bitmap, což umožňuje efektivní provádění složitých filtrů v dotazech.
    4. Při vkládání/aktualizaci hodnot jsou velmi neefektivní.


    Bitmapové indexy se většinou používají v aplikacích datových skladů, kde je databáze pouze pro čtení s výjimkou ETL procesů a obvykle potřebujete provádět složité dotazy proti hvězdové schéma , kde bitmapové indexy mohou urychlit filtrování na základě podmínek v tabulkách dimenzí, které obvykle nemají příliš mnoho různých hodnot.

Velmi krátké shrnutí:používejte indexy B-Tree ("výchozí" index ve většině databází), pokud nejste vývojář datového skladu a víte budete mít prospěch z indexu bitmapy.



  1. Je v tsql vložka s příkazem Select bezpečná z hlediska souběžnosti?

  2. Získání cesty MySQL v příkazovém řádku

  3. mysql vypočítá sekundy mezi dvěma daty/časy pro každý den

  4. MySQL zkrátí zřetězený výsledek funkce GROUP_CONCAT