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