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.

AMP 1

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

AMP 2

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.

AMP 1

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

AMP 2

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.