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.
RowHash | Best.-Nr | Bestelldatum |
---|---|---|
1 | 7505 | 03.10.2015 |
2 | 7504 | 03.10.2015 |
3 | 7501 | 2015-10-01 |
4 | 7508 | 2015-10-05 |
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.
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 |
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.