Pergunta

Eu tenho um campo em um banco de dados que é quase única: 98% do tempo dos valores será única, mas pode ter algumas duplicatas. Eu não vou estar fazendo muitas pesquisas sobre esse campo; dizer duas vezes por mês. A tabela tem atualmente ~ 5000 registros e vai ganhar cerca de 150 por mês.

Se este campo tem um índice?

Estou usando o MySQL.

Foi útil?

Solução

Eu acho que o 'quase único' é, provavelmente, um arenque vermelho. Os dados seja única, ou não é, mas isso não determina se você gostaria de indexá-lo por razões de desempenho.

Resposta:

5000 registros não é realmente muitos em tudo, e independentemente de você ter um índice, pesquisas ainda vai ser rápido. Nessa taxa de inserções, isso vai te levar 3 anos para chegar a 10.000 registros, que ainda é também não muitos.
Eu, pessoalmente, não me incomodaria com a adição de um índice, mas não importa se você fez.

Explicação:

O que você tem que pensar sobre quando decidir incluir um índice é o trade-off entre a velocidade de inserção, e velocidade de seleção.

Sem um índice, fazendo um select nesse campo significa MySQL tem que andar sobre cada linha e ler cada único campo. Adicionar um índice impede que isso.

A desvantagem do índice é que cada dados de tempo é inserido, o DB tem que atualizar o índice, além de adicionar os dados. Isso geralmente é uma pequena sobrecarga, mas você realmente aviso se você tinha grande quantidade de índices, e estavam fazendo um monte de gravações.

Com o tempo você obter isso muitas linhas em seu banco de dados, você iria querer um índice de qualquer maneira, caso contrário seus seleciona levaria o dia todo, mas é apenas algo para estar ciente sobre para que você não acabar adicionando índices em campos "apenas no caso de eu precisar dele"

Outras dicas

Isso não é muito muitos registros em tudo; Eu não me incomoda de fazer quaisquer índices nessa tabela. A singularidade relativa do campo é irrelevante -. Mesmo em anos de idade hardware commodity eu esperaria uma consulta em que mesa para tomar uma fração de segundo

Você pode usar a regra geral: otimizar quando se torna um problema. Só não use um índice até você perceber que você precisa de um.

A partir do que você diz, não soa como um índice é necessário. Regra de ouro é campos de índice que estão sendo usados ??em seleciona um monte de acelerar a pesquisa, que por sua vez (CAN) desacelera inserções e atualizações.

Em um conjunto de registros tão pequeno como o seu, eu não acho que você vai ver muito de um mundo real bater de qualquer maneira.

Se você só vai estar fazendo pesquisas sobre ele duas vezes por mês e sua que algumas linhas, então eu diria que não indexá-lo. É tudo, mas inútil.

No. Não há muitos registros e não vai ser frequentemente consultados. Não há necessidade de índice.

É realmente um julgamento. Com uma pequena mesa como você pode procurar razoavelmente rapidamente sem um índice, assim que você poderia passar sem ele.

Por outro lado, o custo de criar um índice que você não precisa realmente é muito baixo, então você não está salvando-se muito por não fazê-lo.

Além disso, se você criar o índice, você está coberto para o futuro se você de repente começar a receber 1000 novos recordes / semana. Possivelmente você sabe o suficiente sobre a situação para dizer com certeza que isso nunca vai acontecer, mas os requisitos têm uma maneira de mudar quando você menos espera.

EDIT: Quanto requisitos mudar, a coisa a considerar é o seguinte: Se a DB não crescer e você descobrir mais tarde que você precisa de um índice, você pode simplesmente criar o índice e ser feito? Ou você também precisa lotes de mudança de código para fazer uso do novo índice?

Depende. Como outros têm respondido, há um trade off entre a velocidade de actualização da tabela e velocidade seleção. atualização da tabela inclui inserções, atualizações e exclusões na tabela.

Uma pergunta que você não abordou. A tabela tem uma chave primária, e um índice correspondente? Uma tabela sem índices normalmente beneficia forma possuindo pelo menos um índice. A forma mais comum de obter esse índice é declarar uma chave primária, e contar com o DBMS para gerar um índice de conformidade.

Se uma tabela não tem candidatos para chave primária, que normalmente indica uma falha grave no design da tabela. Isso é uma questão separada e deve ter uma discussão spearate.

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