Teradata - Partitionierter Primärindex

Partitioned Primary Index (PPI) ist ein Indexierungsmechanismus, der zur Verbesserung der Leistung bestimmter Abfragen hilfreich ist. Wenn Zeilen in eine Tabelle eingefügt werden, werden sie in einem AMP gespeichert und nach ihrer Zeilen-Hash-Reihenfolge angeordnet. Wenn eine Tabelle mit PPI definiert wird, werden die Zeilen nach ihrer Partitionsnummer sortiert. Innerhalb jeder Partition sind sie nach ihrem Zeilen-Hash angeordnet. Zeilen werden einer Partition basierend auf dem definierten Partitionsausdruck zugewiesen.

Vorteile

  • Vermeiden Sie einen vollständigen Tabellenscan für bestimmte Abfragen.

  • Vermeiden Sie die Verwendung eines Sekundärindex, der eine zusätzliche physische Struktur und zusätzliche E / A-Wartung erfordert.

  • Greifen Sie schnell auf eine Teilmenge einer großen Tabelle zu.

  • Löschen Sie die alten Daten schnell und fügen Sie neue Daten hinzu.

Beispiel

Betrachten Sie die folgende Auftragstabelle mit dem Primärindex für Bestellnummer.

StoreNo Best.-Nr Bestelldatum Auftragssumme
101 7501 2015-10-01 900
101 7502 2015-10-02 1.200
102 7503 2015-10-02 3.000
102 7504 03.10.2015 2,454
101 7505 03.10.2015 1201
103 7506 04.10.2015 2,454
101 7507 2015-10-05 1201
101 7508 2015-10-05 1201

Angenommen, die Datensätze werden wie in den folgenden Tabellen gezeigt auf AMPs verteilt. Die aufgezeichneten Daten werden in AMPs gespeichert und nach ihrem Zeilen-Hash sortiert.

AMP 1

RowHash Best.-Nr Bestelldatum
1 7505 03.10.2015
2 7504 03.10.2015
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash Best.-Nr Bestelldatum
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 04.10.2015
4 7503 2015-10-02

Wenn Sie eine Abfrage ausführen, um die Bestellungen für ein bestimmtes Datum zu extrahieren, wählt der Optimierer möglicherweise die Verwendung des vollständigen Tabellenscans. Anschließend kann auf alle Datensätze im AMP zugegriffen werden. Um dies zu vermeiden, können Sie das Bestelldatum als partitionierten Primärindex definieren. Wenn Zeilen in die Auftragstabelle eingefügt werden, werden sie nach dem Bestelldatum partitioniert. Innerhalb jeder Partition werden sie nach ihrem Zeilen-Hash sortiert.

Die folgenden Daten zeigen, wie die Datensätze in AMPs gespeichert werden, wenn sie nach Bestelldatum partitioniert sind. Wenn eine Abfrage ausgeführt wird, um auf die Datensätze nach Bestelldatum zuzugreifen, wird nur auf die Partition zugegriffen, die die Datensätze für diese bestimmte Bestellung enthält.

AMP 1

Partition RowHash Best.-Nr Bestelldatum
0 3 7501 2015-10-01
1 1 7505 03.10.2015
1 2 7504 03.10.2015
2 4 7508 2015-10-05

AMP 2

Partition RowHash Best.-Nr Bestelldatum
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 04.10.2015
2 1 7507 2015-10-05

Im Folgenden finden Sie ein Beispiel zum Erstellen einer Tabelle mit dem primären Partitionsindex. Die PARTITION BY-Klausel wird zum Definieren der Partition verwendet.

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
);

Im obigen Beispiel ist die Tabelle nach OrderDate-Spalten unterteilt. Für jeden Tag gibt es eine separate Partition.