Teradata - Index primaire partitionné

L'index primaire partitionné (PPI) est un mécanisme d'indexation utile pour améliorer les performances de certaines requêtes. Lorsque des lignes sont insérées dans une table, elles sont stockées dans un AMP et classées par ordre de hachage des lignes. Lorsqu'une table est définie avec PPI, les lignes sont triées par leur numéro de partition. Dans chaque partition, ils sont classés par hachage de ligne. Les lignes sont affectées à une partition en fonction de l'expression de partition définie.

Avantages

  • Évitez l'analyse complète de la table pour certaines requêtes.

  • Évitez d'utiliser un index secondaire qui nécessite une structure physique supplémentaire et une maintenance d'E / S supplémentaire.

  • Accédez rapidement à un sous-ensemble d'une grande table.

  • Supprimez rapidement les anciennes données et ajoutez de nouvelles données.

Exemple

Considérez la table Orders suivante avec l'index principal sur OrderNo.

MagasinNon N ° de commande Date de commande Total de la commande
101 7501 01/10/2015 900
101 7502 02/10/2015 1 200
102 7503 02/10/2015 3 000
102 7504 03/10/2015 2 454
101 7505 03/10/2015 1201
103 7506 04/10/2015 2 454
101 7507 05/10/2015 1201
101 7508 05/10/2015 1201

Supposons que les enregistrements sont répartis entre les AMP comme indiqué dans les tableaux suivants. Les enregistrements sont stockés dans des AMP, triés en fonction de leur hachage de ligne.

AMP 1

RowHash N ° de commande Date de commande
1 7505 03/10/2015
2 7504 03/10/2015
3 7501 01/10/2015
4 7508 05/10/2015

AMP 2

RowHash N ° de commande Date de commande
1 7507 05/10/2015
2 7502 02/10/2015
3 7506 04/10/2015
4 7503 02/10/2015

Si vous exécutez une requête pour extraire les commandes pour une date particulière, l'optimiseur peut choisir d'utiliser l'analyse complète de la table, puis tous les enregistrements de l'AMP sont accessibles. Pour éviter cela, vous pouvez définir la date de la commande en tant qu'index primaire partitionné. Lorsque des lignes sont insérées dans la table des commandes, elles sont partitionnées par date de commande. Dans chaque partition, ils seront classés par hachage de ligne.

Les données suivantes montrent comment les enregistrements seront stockés dans les AMP, s'ils sont partitionnés par date de commande. Si une requête est exécutée pour accéder aux enregistrements par date de commande, seule la partition qui contient les enregistrements pour cette commande particulière sera accessible.

AMP 1

Cloison RowHash N ° de commande Date de commande
0 3 7501 01/10/2015
1 1 7505 03/10/2015
1 2 7504 03/10/2015
2 4 7508 05/10/2015

AMP 2

Cloison RowHash N ° de commande Date de commande
0 2 7502 02/10/2015
0 4 7503 02/10/2015
1 3 7506 04/10/2015
2 1 7507 05/10/2015

Voici un exemple pour créer une table avec l'index principal de la partition. La clause PARTITION BY est utilisée pour définir la partition.

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

Dans l'exemple ci-dessus, la table est partitionnée par colonne OrderDate. Il y aura une partition distincte pour chaque jour.