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.
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 |
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.
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 |
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.