Teradata - podzielony indeks podstawowy
Partycjonowany indeks podstawowy (PPI) to mechanizm indeksujący, który jest przydatny w poprawianiu wydajności niektórych zapytań. Kiedy wiersze są wstawiane do tabeli, są przechowywane w AMP i uporządkowane według ich kolejności mieszania wierszy. Gdy tabela jest zdefiniowana za pomocą PPI, wiersze są sortowane według numeru partycji. W każdej partycji są uporządkowane według wartości hash w wierszu. Wiersze są przypisywane do partycji na podstawie zdefiniowanego wyrażenia partycji.
Zalety
Unikaj pełnego skanowania tabeli dla niektórych zapytań.
Unikaj używania indeksu pomocniczego, który wymaga dodatkowej struktury fizycznej i dodatkowej obsługi we / wy.
Uzyskaj szybki dostęp do podzbioru dużej tabeli.
Szybko upuść stare dane i dodaj nowe.
Przykład
Rozważ poniższą tabelę zamówień z indeksem podstawowym w zamówieniu nr.
Numer sklepu | Nr zamówienia | Data zamówienia | Suma zamówienia |
---|---|---|---|
101 | 7501 | 2015-10-01 | 900 |
101 | 7502 | 2015-10-02 | 1200 |
102 | 7503 | 2015-10-02 | 3000 |
102 | 7504 | 2015-10-03 | 2,454 |
101 | 7505 | 2015-10-03 | 1201 |
103 | 7506 | 2015-10-04 | 2,454 |
101 | 7507 | 2015-10-05 | 1201 |
101 | 7508 | 2015-10-05 | 1201 |
Załóżmy, że rekordy są dystrybuowane między stronami AMP, jak pokazano w poniższych tabelach. Nagrane pliki są przechowywane w AMP, posortowane na podstawie skrótu wiersza.
RowHash | Nr zamówienia | Data zamówienia |
---|---|---|
1 | 7505 | 2015-10-03 |
2 | 7504 | 2015-10-03 |
3 | 7501 | 2015-10-01 |
4 | 7508 | 2015-10-05 |
RowHash | Nr zamówienia | Data zamówienia |
---|---|---|
1 | 7507 | 2015-10-05 |
2 | 7502 | 2015-10-02 |
3 | 7506 | 2015-10-04 |
4 | 7503 | 2015-10-02 |
Jeśli uruchomisz zapytanie, aby wyodrębnić zamówienia z określonej daty, optymalizator może wybrać opcję pełnego skanowania tabeli, a następnie uzyskasz dostęp do wszystkich rekordów w AMP. Aby tego uniknąć, możesz zdefiniować datę zamówienia jako partycjonowany indeks podstawowy. Kiedy wiersze są wstawiane do tabeli zamówień, są one dzielone według daty zamówienia. W każdej partycji zostaną uporządkowane według wartości hash wiersza.
Poniższe dane pokazują, jak rekordy będą przechowywane w AMP, jeśli są podzielone według daty zamówienia. Jeśli zostanie uruchomione zapytanie w celu uzyskania dostępu do rekordów według daty zamówienia, uzyskany zostanie dostęp tylko do partycji zawierającej rekordy dla tego konkretnego zamówienia.
Przegroda | RowHash | Nr zamówienia | Data zamówienia |
---|---|---|---|
0 | 3 | 7501 | 2015-10-01 |
1 | 1 | 7505 | 2015-10-03 |
1 | 2 | 7504 | 2015-10-03 |
2 | 4 | 7508 | 2015-10-05 |
Przegroda | RowHash | Nr zamówienia | Data zamówienia |
---|---|---|---|
0 | 2 | 7502 | 2015-10-02 |
0 | 4 | 7503 | 2015-10-02 |
1 | 3 | 7506 | 2015-10-04 |
2 | 1 | 7507 | 2015-10-05 |
Poniżej znajduje się przykład tworzenia tabeli z indeksem podstawowym partycji. Klauzula PARTITION BY służy do definiowania partycji.
CREATE SET TABLE Orders (
StoreNo SMALLINT,
OrderNo INTEGER,
OrderDate DATE FORMAT 'YYYY-MM-DD',
OrderTotal INTEGER
)
PRIMARY INDEX(OrderNo)
PARTITION BY RANGE_N (
OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);
W powyższym przykładzie tabela jest podzielona na partycje według kolumny OrderDate. Każdego dnia będzie osobna partycja.