Teradata: índice primario particionado

El índice primario particionado (PPI) es un mecanismo de indexación que resulta útil para mejorar el rendimiento de determinadas consultas. Cuando las filas se insertan en una tabla, se almacenan en un AMP y se organizan por orden de hash de filas. Cuando una tabla se define con PPI, las filas se ordenan por su número de partición. Dentro de cada partición, están ordenados por su hash de fila. Las filas se asignan a una partición según la expresión de partición definida.

Ventajas

  • Evite el escaneo completo de la tabla para determinadas consultas.

  • Evite el uso de índices secundarios que requieran una estructura física adicional y un mantenimiento de E / S adicional.

  • Acceda rápidamente a un subconjunto de una mesa grande.

  • Elimine los datos antiguos rápidamente y agregue datos nuevos.

Ejemplo

Considere la siguiente tabla de pedidos con índice principal en el número de pedido.

Almacenar ninguna N º de pedido Fecha de orden Total del pedido
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

Suponga que los registros se distribuyen entre AMP como se muestra en las siguientes tablas. Los registros se almacenan en AMP, ordenados en función de su hash de fila.

AMP 1

RowHash N º de pedido Fecha de orden
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash N º de pedido Fecha de orden
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

Si ejecuta una consulta para extraer los pedidos para una fecha en particular, entonces el optimizador puede optar por utilizar el Análisis de tabla completo y luego se puede acceder a todos los registros dentro del AMP. Para evitar esto, puede definir la fecha del pedido como Índice primario particionado. Cuando se insertan filas en la tabla de pedidos, se dividen según la fecha del pedido. Dentro de cada partición, se ordenarán por su hash de fila.

Los siguientes datos muestran cómo se almacenarán los registros en AMP, si están divididos por fecha de pedido. Si se ejecuta una consulta para acceder a los registros por Fecha de pedido, solo se accederá a la partición que contiene los registros de ese pedido en particular.

AMP 1

Dividir RowHash N º de pedido Fecha de orden
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

Dividir RowHash N º de pedido Fecha de orden
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 2015-10-04
2 1 7507 2015-10-05

A continuación se muestra un ejemplo para crear una tabla con el índice primario de partición. La cláusula PARTITION BY se utiliza para definir la partición.

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

En el ejemplo anterior, la tabla está dividida por la columna OrderDate. Habrá una partición separada para cada día.