deve campos quase únicos têm índices
-
08-07-2019 - |
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.
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.