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