Teradata - Índice primário particionado

O índice primário particionado (PPI) é um mecanismo de indexação útil para melhorar o desempenho de certas consultas. Quando as linhas são inseridas em uma tabela, elas são armazenadas em um AMP e organizadas por ordem de hash de linha. Quando uma tabela é definida com PPI, as linhas são classificadas por seu número de partição. Em cada partição, eles são organizados por seu hash de linha. As linhas são atribuídas a uma partição com base na expressão de partição definida.

Vantagens

  • Evite a verificação completa da tabela para certas consultas.

  • Evite usar o índice secundário que requer estrutura física adicional e manutenção adicional de E / S.

  • Acesse um subconjunto de uma grande mesa rapidamente.

  • Elimine os dados antigos rapidamente e adicione novos dados.

Exemplo

Considere a seguinte tabela de pedidos com Índice primário em OrderNo.

StoreNo OrderNo Data do pedido Total de pedidos
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

Suponha que os registros sejam distribuídos entre AMPs, conforme mostrado nas tabelas a seguir. Os registros são armazenados em AMPs, classificados com base no hash de linha.

AMP 1

RowHash OrderNo Data do pedido
1 7505 03/10/2015
2 7504 03/10/2015
3 7501 01/10/2015
4 7508 05/10/2015

AMP 2

RowHash OrderNo Data do pedido
1 7507 05/10/2015
2 7502 02/10/2015
3 7506 04/10/2015
4 7503 02/10/2015

Se você executar uma consulta para extrair os pedidos de uma data específica, o otimizador pode optar por usar a Verificação de tabela completa e todos os registros no AMP podem ser acessados. Para evitar isso, você pode definir a data do pedido como Índice primário particionado. Quando as linhas são inseridas na tabela de pedidos, elas são particionadas pela data do pedido. Em cada partição, eles serão ordenados por seu hash de linha.

Os dados a seguir mostram como os registros serão armazenados em AMPs, caso sejam particionados por Data do Pedido. Se uma consulta for executada para acessar os registros por Data do Pedido, apenas a partição que contém os registros desse pedido específico será acessada.

AMP 1

Partição RowHash OrderNo Data do pedido
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

Partição RowHash OrderNo Data do pedido
0 2 7502 02/10/2015
0 4 7503 02/10/2015
1 3 7506 04/10/2015
2 1 7507 05/10/2015

A seguir está um exemplo para criar uma tabela com índice primário de partição. A cláusula PARTITION BY é usada para definir a partição.

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

No exemplo acima, a tabela é particionada pela coluna OrderDate. Haverá uma partição separada para cada dia.