Recentemente, aprendi a maravilha dos índices, e o desempenho melhorou dramaticamente. No entanto, com tudo que aprendi, não consigo encontrar a resposta para essa pergunta.
Os índices são ótimos, mas por que alguém não poderia simplesmente indexar todos os campos para tornar a tabela incrivelmente rápida? Tenho certeza de que há um bom motivo para não fazer isso, mas que tal três campos em uma tabela de trinta campos? 10 em um campo de 30? Onde devemos traçar o limite e por quê?
Respostas:
Os índices ocupam espaço na memória (RAM); Muitos ou muitos índices e o banco de dados terá que trocá-los de e para o disco. Eles também aumentam o tempo de inserção e exclusão (cada índice deve ser atualizado para cada dado inserido / excluído / atualizado).
Você não tem memória infinita. Fazendo com que todos os índices caibam na RAM = bom.
Você não tem tempo infinito. Indexar apenas as colunas que você precisa indexar minimiza o impacto de desempenho de inserção / exclusão / atualização.
fonte
Lembre-se de que cada índice deve ser atualizado sempre que uma linha for atualizada, inserida ou excluída. Portanto, quanto mais índices você tiver, mais lento será o desempenho das operações de gravação.
Além disso, cada índice ocupa mais espaço em disco e espaço de memória (quando chamado), portanto, também pode tornar as operações de leitura lentas (para tabelas grandes). Veja isso
fonte
Você tem que equilibrar as necessidades do CRUD. Escrever em tabelas fica lento. Quanto a onde traçar a linha, isso depende de como os dados estão sendo acessados (filtragem de classificação, etc.).
fonte
A indexação irá ocupar mais espaço alocado do drive e da memória RAM, mas também melhorando muito o desempenho. Infelizmente, quando atinge o limite de memória, o sistema cede o espaço da unidade e arrisca o desempenho. Praticamente, você não deve indexar nenhum campo que você possa pensar que não envolve nenhum tipo de algoritmo de passagem de dados, nem inserção nem pesquisa (cláusula WHERE). Mas você deveria se o contrário. Por padrão, você deve indexar todos os campos. Os campos que você deve considerar desindexar são se as consultas forem usadas apenas pelo moderador, a menos que eles precisem de velocidade também
fonte
esta resposta é minha opinião pessoal baseada estou usando minha lógica matemática para responder
a segunda questão era sobre a fronteira onde parar, primeiro vamos fazer alguns cálculos matemáticos, suponha que temos N linhas com L campos em uma tabela, se indexarmos todos os campos, obteremos L novas tabelas de índice onde cada tabela será classificada em um de forma significativa os dados do campo de índice, à primeira vista se sua tabela tem um peso W, ela se tornará W * 2 (1 tera se tornará 2 tera) se você tiver 100 mesa grande (eu já trabalhei no projeto onde o número da mesa era em torno da mesa de 1800) você perderá 100 vezes esse espaço (100 tera), isso está longe de ser sábio.
Se formos aplicar índices em todas as tabelas, teremos que pensar sobre as atualizações de índice onde uma atualização dispara todos os índices atualizam esta é uma seleção de todos os equivalentes não ordenados no tempo
a partir disso concluo que você tem neste cenário que se você perder esse tempo é preferível perdê-lo em um select nem em uma atualização porque se você selecionar um campo que não está indexado você não irá disparar outro select em todos os campos que estão não indexado
o que indexar?
chaves estrangeiras: é uma obrigação baseada em
chave primária: ainda não tenho certeza sobre isso pode ser se alguém ler isso poderia ajudar neste caso
outros campos: a primeira resposta natural é a metade dos campos restantes porque: se você indexar mais você não está longe da melhor resposta se você indexar menos você também não está longe porque sabemos que nenhum índice é ruim e todos indexados também é ruim.
destes 3 pontos posso concluir que se temos L campos compostos por K chaves o limite deve ser algo próximo a
((L-K)/2)+K
mais ou menos L / 10esta resposta é baseada na minha lógica e preços pessoais
fonte
Não é uma boa ideia indexar todas as colunas de uma tabela. Embora isso torne a leitura da tabela muito rápida, também fica muito mais lento para escrever. Gravar em uma tabela que tem todas as colunas indexadas envolveria colocar o novo registro nessa tabela e, em seguida, colocar as informações de cada coluna em sua própria tabela de índice.
fonte