Como os índices afetam o desempenho da consulta?

12

Obviamente, manter vários índices diferentes tem um impacto negativo no desempenho de inserção e exclusão. E quanto ao desempenho da consulta: faz sentido manter muitos índices em uma tabela? O desempenho da consulta melhorará em qualquer caso com um índice adicionado (é claro, para consultas que usem o índice) ou é possível que o desempenho da consulta seja degradado com muitos índices, pois torna-se necessário consultar todos os índices para obter o índice resultado?

Caso existam índices diferentes em uma tabela: todos eles serão considerados ou apenas os melhores do ponto de vista do otimizador? A Oracle implementa índices multidimensionais?

paweloque
fonte
2
por que você não testa isso e relata seus resultados? :)
Neil McGuigan
Eu vou fazer amanhã :)
paweloque
2
Índices não necessariamente abrandar exclusões, eles também podem acelerá-los (assim como as atualizações podem tirar proveito de um índice)
a_horse_with_no_name
@el chefe Qual o sentido de reinventar a roda? então sim, o efeito do desempenho da consulta está em questão, embora tenhamos certeza de que as inserções / exclusões seriam afetadas. E as atualizações? eles serão afetados negativamente?
Sangram

Respostas:

15

Levará um pouco mais de tempo para gerar o plano quando houver mais índices a serem considerados, mas duvido que a diferença seja mensurável. Os motivos para a eliminação de um índice não listam o desempenho da consulta. Por outro lado, em geral, você não deve criar índices, a menos que saiba que eles serão usados ​​para tornar uma consulta mais eficiente.

No Oracle Concepts Guide , aqui estão os critérios para criar um índice.

Em geral, considere criar um índice em uma coluna em qualquer uma das seguintes situações:

  • As colunas indexadas são consultadas com freqüência e retornam uma pequena porcentagem do número total de linhas na tabela.

  • Existe uma restrição de integridade referencial na (s) coluna (s) indexada (s). O índice é um meio de evitar um bloqueio de tabela completo que, caso contrário, seria necessário se você atualizar a chave primária da tabela pai, mesclar na tabela pai ou excluir da tabela pai.

  • Uma restrição de chave exclusiva será colocada na tabela e você deseja especificar manualmente o índice e todas as opções de índice.

Todos os índices serão considerados no sentido de que todos os índices nas tabelas da consulta são examinados para determinar se eles poderiam ser usados. Aqueles que poderiam ser examinados para determinar a utilidade.

Leigh Riffel
fonte
7

Enquanto suas estatísticas estiverem atualizadas, o otimizador baseado em custos deve tomar decisões sensatas sobre quais índices usar. Caso contrário, é a hora de usar as dicas . Ele nunca consultará um índice em uma coluna que não seja necessário para satisfazer a consulta.

Gaius
fonte
0

Encontrei isso na seleção de uma estratégia de índice do Guia do Desenvolvedor de Aplicativos . Essa página é sobre 'selecionar uma estratégia de índice':

Limitar o número de índices para cada tabela

Quanto mais índices, mais despesas são incorridas à medida que a tabela é alterada. Quando linhas são inseridas ou excluídas, todos os índices na tabela devem ser atualizados. Quando uma coluna é atualizada, todos os índices na coluna devem ser atualizados.

Você deve avaliar o benefício de desempenho dos índices para consultas em relação à sobrecarga de desempenho das atualizações. Por exemplo, se uma tabela for principalmente somente leitura, você poderá usar mais índices; mas, se uma tabela estiver muito atualizada, você poderá usar menos índices.

Sangram
fonte
2
A partir da pergunta: "Obviamente, mantendo vários índices diferentes têm um impacto negativo sobre a inserção e desempenho de exclusão Que tal consulta de desempenho"
Jack diz tentativa topanswers.xyz