Indeks vs. partycja

20

Dlaczego nie jest możliwe zwiększenie wydajności tylko przy pomocy indeksów, tak że konieczne stają się inne techniki, takie jak partycjonowanie tabel? Pytanie dotyczy tylko wydajności, oczywiście różne partycje można umieścić w różnych obszarach tabel, co ma inne efekty, których nie można osiągnąć za pomocą indeksów.

Innymi słowy, tylko pod względem wydajności: czy możliwe jest osiągnięcie takich samych ulepszeń wydajności za pomocą indeksów, jak w przypadku partycjonowania tabel?

pawelokowy
źródło
2
Zamiast myśleć o indeksowaniu i partycjonowaniu jako rozwiązaniach poprawiających wydajność, powinieneś myśleć o obu tych narzędziach, które mogą być używane osobno lub łącznie z poprawą wydajności w bazie danych.
ScottCher,

Odpowiedzi:

18

Nie, partycjonowanie pozwala na ograniczenie niektórych skanów tabeli do określonej partycji. Indeksy są zwykle bezużyteczne, jeśli zwracasz więcej niż 2 do 4 procent danych tabeli. Jeśli kryteria wyboru pozwalają na zlokalizowanie zapytania na konkretnej partycji, inne partycje nie będą musiały być skanowane.

Optymalizator może wybrać skanowanie tabeli dla niektórych partycji i indeksy dla innych. Nie widziałem żadnych planów wyjaśniających, że to się dzieje.

Jeśli masz dużo danych historycznych, możesz utworzyć zapytania dotyczące danych bieżących, aby ograniczyć partycje, które są rozważane, do partycji zawierających dane bieżące.

BillThor
źródło
3
Ja tworzysz partycje. Wybierz odpowiednie urządzenie pamięci masowej dla każdej partycji. Umieść rzeczywistą partycję danych na dysku wysokiej prędkości i starszym innym typie.
Nico,
7

Aby odpowiedzieć bezpośrednio na twoje ostatnie pytanie: nie, nie sądzę, że są one równoważne. Pomyśl o bardzo dużej tabeli (dziesiątki GB), którą trzeba będzie przeszukać w celu znalezienia danych na jeden dzień. Korzystając z codziennych partycji, będziesz skanować tylko dane z tego dnia, bez żadnych ograniczeń miejsca, podczas gdy indeks jest osobną strukturą, która może nie zawierać wystarczającej ilości informacji (i zajmuje również miejsce, co jest problemem przy mówieniu o dużych bazach danych) lub może nie być wystarczająco selektywny.

W każdym razie indeksy i partycje nie konkurują o te same korzyści w zakresie użytkowania i wydajności. Saldo powinieneś znaleźć w swojej bazie danych.

Marian
źródło