Índice x partição

20

Por que não é possível obter melhorias de desempenho apenas com índices, para que outras técnicas, como o particionamento de tabelas, sejam necessárias? A questão refere-se apenas ao desempenho, é claro que diferentes partições podem ser colocadas em diferentes espaços de tabela, o que tem outros efeitos que não podem ser alcançados com índices.

Ou, em outras palavras, apenas no desempenho: é possível obter as mesmas melhorias de desempenho com índices e particionamento de tabelas?

paweloque
fonte
2
Em vez de pensar em indexação e particionamento como soluções para melhoria de desempenho, você deve pensar em ferramentas como ferramentas que podem ser usadas separadamente ou em conjunto para obter melhorias de desempenho em seu banco de dados.
ScottCher

Respostas:

18

Não, o particionamento permite que algumas verificações de tabela sejam restritas a uma partição específica. Os índices tendem a ser inúteis se você retornar mais de 2 a 4% dos dados da tabela. Se o seu critério de seleção permitir que a consulta seja localizada em uma partição específica, as outras partições não precisarão ser verificadas.

Pode ser possível para o otimizador optar por usar a varredura de tabela para algumas partições e índices para outras. Não vi nenhum plano de explicação que indique que isso está acontecendo.

Se você possui muitos dados históricos, é possível criar consultas para dados atuais para limitar as partições consideradas às que contêm dados atuais.

BillThor
fonte
3
Eu você está criando partições. Certifique-se de escolher o dispositivo de armazenamento correto para cada partição. Coloque a partição de dados real em uma unidade de alta velocidade e a outra mais antiga.
Nico
7

Para responder diretamente à sua última pergunta: não, não acho que sejam equivalentes. Pense em uma tabela muito grande (dezenas de GB) que precisará ser pesquisada para obter os dados de um dia. Usando partições diárias, você verificará apenas os dados daquele dia, sem qualquer penalidade de espaço, enquanto um índice é uma estrutura separada que pode não conter informações suficientes (e também ocupa espaço, o que é uma preocupação quando se fala em grandes bancos de dados) ou pode não ser bastante seletivo.

De qualquer forma, índices e partições não estão competindo pelos mesmos benefícios em uso e desempenho. Você deve encontrar o saldo no seu banco de dados.

Marian
fonte