Pergunta

Tenho uma pergunta geral sobre a maneira como a indexação do banco de dados funciona, principalmente no MySQL. Digamos que eu tenho uma tabela com um milhão de linhas com uma coluna "ClientID" que é distribuída relativamente igualmente entre 30 valores. Assim, esta coluna é uma cardinalidade muito baixa (30) em relação à chave primária (1 milhão).

Agora, entendo que você não deve criar índices em campos de baixa cardinalidade. No entanto, neste caso, as consultas só são feitas com um dos 30 clientes. Assim, a criação de um índice no ClientID não seria útil, pois o espaço de pesquisa é automaticamente reduzido para 1/30 do que normalmente seria? Ou o meu entendimento de como o índice funciona com falha?

Obrigado

Foi útil?

Solução

O que aprendi como uma regra geral muito geral dos seminários patrocinados pelo MYSQL que participei é que você ganha algum nível de benefício de desempenho na maioria dos casos em que a cardinalidade reduz seu espaço de pesquisa em 80% ou mais. Isso parece se manter em praticamente qualquer configuração de hardware que eu encontrei.

Parece um índice de que você quase certamente se beneficiaria. Obviamente, isso pode se dividir rapidamente em uma mesa de gravação pesada, onde o índice precisa ser ajustado constantemente.

Em outras circunstâncias, a resposta adequada é realmente 'depende', e o benchmarking geralmente é o caminho a percorrer.

Você também pode querer verificar a função Benchmark () em MySQL - não é perfeita, mas pode ajudar a testar coisas assim: http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_benchmark

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