Nie znam się tak dobrze na bazach danych, a teraz próbuję zrozumieć mechanizm indeksowania.
Z tego, co wiem, w RDBMS indeksowanie w kolumnie przyspiesza wyszukiwanie w tej kolumnie. Odnosi się to również do potrójnych sklepów, tylko tam wskaźniki zakładają, że będziesz wyszukiwać (na przykład) głównie według tematu, następnie według obiektu i tak dalej.
Nie jestem pewien co do RDBMS, ale w potrójnych sklepach możesz zdefiniować więcej niż jeden indeks, pozwalając sklepowi wybrać najlepszy indeks dla każdego zapytania (mam nadzieję, że dobrze to zrozumiałem). Oczywiście pojawia się następujące pytanie:
Dlaczego nie powinienem dodawać wszystkich możliwych indeksów do potrójnego sklepu i rozszerzać do RDBMS, dlaczego nie tworzyć indeksów w każdej kolumnie (zakładając, że nie jestem zbyt leniwy)?
Indeksy należy umieszczać tylko w razie potrzeby. Jako podstawową zasadę, gdy opracowuję schemat bazy danych, każda tabela otrzymuje na początku indeks klastrowany klucza podstawowego PK. Będzie to unikalny identyfikator danych w tej tabeli. W może znajdować się na 1 kolumnie lub wielu.
Następnie zazwyczaj dodam po prostu niepowtarzalne indeksy nieklastrowane w kolumnach, w których chcę wymusić unikalność.
To jest schemat podstawowy. Gdy aplikacja się rozwija i dojrzewa, w razie potrzeby dodajemy indeksy w oparciu o problemy z wydajnością i sposób, w jaki sprawdzamy dane.
Każdy dodany indeks zwiększa zastosowane odstępy, a także dodaje dodatkową konserwację. Wybierz mądrze swoje indeksy.
źródło
Siła indeksów polega na tym, że są one 1) strukturą danych, którą można szybko przeszukać i 2) bardziej zwartą niż rzeczywiste tabele, dzięki czemu więcej indeksu zmieści się w pamięci zamiast być stronicowanym na dysk.
Jeśli masz indeks w każdej kolumnie, wówczas same indeksy zajmą więcej miejsca niż reprezentowana tabela. Jeśli baza danych naprawdę korzysta ze wszystkich indeksów, zajmie to więcej czasu tylko na zamianę ich i brak pamięci. Ponadto każdy indeks musi być aktualizowany w trybie obojętnym, aktualizowanym lub usuwanym.
Poza tym indeksy w jednej kolumnie nie są nawet najlepsze, co możesz zrobić. Większość baz danych relacji pozwala na indeks wielu kolumn, a kolejność tych kolumn ma znaczenie. Na przykład, jeśli chcę przeszukać bazę danych dla wszystkich osób, które uczęszczały do Duke'a z klas między 1980 a 1984 rokiem, to chcę tego indeksu (School, ClassYear). W zapytaniu nie można użyć indeksu z tymi samymi kolumnami, ale odwrócić.
Aby stworzyć każdy możliwy indeks, jest co najmniej n! sposoby układania kolumn w indeksie. Przy zaledwie 5 kolumnach istnieje 120 możliwych indeksów.
Ponieważ istnieje wiele możliwych indeksów, naprawdę musisz ustalić, które indeksy są przydatne dla Twojej aplikacji, i utworzyć tylko te.
źródło
Utworzenie indeksu dla każdej kolumny w tabeli jest zwykle stratą miejsca, a jak wspomnieli inni, może spowolnić operacje wstawiania / aktualizacji. Indeks służy do przyspieszenia zapytań. Zalecałbym dodanie indeksu do kolumny tylko wtedy, gdy zauważysz słabą wydajność podczas zapytania o wartości w tej kolumnie.
Niektóre bazy danych mogą wymagać indeksu klucza podstawowego tabeli, więc możesz nie mieć wyboru. Ponadto, jeśli masz bardzo duże kolumny tekstowe, istnieją specjalne technologie, które są zaprojektowane do wyszukiwania pełnotekstowego i indeksowania, ale nie zawsze są to te same rodzaje indeksu, których używasz dla małej kolumny liczbowej.
źródło