Pergunta

É criar um índice para uma coluna que está sendo resumido é mais rápido que nenhum índice?

Foi útil?

Solução

Infelizmente, não é claro o que você está pedindo.

Você está perguntando, será que acelerar uma consulta, como

SELECT product, sum(quantity) FROM receipts 
GROUP BY product

Se você adicionou um índice em quantidade?

Se essa é a questão, então a resposta é não. De um modo geral, os índices são úteis quando você precisa encontrar apenas algumas linhas entre muitos; aqui você precisa todas as linhas, de modo que um índice não ajuda.

Há uma exceção obscura (que se aplica tão raramente maioria dos otimizadores DB provavelmente não se incomodam implementar este truque). Se a consulta passa a ser

SELECT sum(foo) FROM bar

, onde há um índice em foo e bar é uma tabela com muitas colunas, é possível ler no índice cheio, incorrer em um hit menor do que se você ler a tabela subjacente, e obter a resposta diretamente do índice - nunca ter que tocar a mesa "real" em tudo! Este é um caso bastante raro, no entanto, e você vai querer testar se o otimizador sabe fazer isso antes de recorrer a este muito.

Outras dicas

No. Os índices melhoram pesquisas, limitando o número de cheques são necessários. Uma função de agregação (contagem de, no máximo, min, soma, média) tem que correr através de todas as entradas de uma coluna independentemente.

Se você quiser fazer o somatório mais rápido, você pode pré-materializou o resultado. Na Oracle, uso visualizações materializadas , sobre o uso de MS SQL exibições indexadas .

Na sua pergunta específica "é criar um índice para uma coluna que está sendo resumido é mais rápido que nenhum índice?", A resposta é não.

A resposta para sua pergunta está na resposta de Spencer:

"Uma função de agregação (contagem de, no máximo, min, soma, média) tem que correr através de todas as entradas numa colunas sendo somadas independentemente."

Apenas esclareceu o contexto de colunas na resposta de Spencer. Sua resposta está correta, no entanto.

Se o índice está cobrindo, geralmente será mais rápido. Quanto mais rápida irá ser determinado pela diferença entre o número de colunas na tabela versus o número do índice. Além disso, ele pode ser mais rápido se houver qualquer critério de filtragem.

Eu encontrei indexar uma coluna na qual (productid aqui) ajuda ao usar esta consulta:

productid SELECT, sum (quantidade) das receitas ONDE productid = 1 GROUP BY productid

Uma das minhas consultas passou de 45 segundos para quase instantânea uma vez eu adicionei o índice.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top