Você ainda precisa de indexação após a normalização do banco de dados

14

Depois de fazer uma boa normalização, você ainda precisa indexar a tabela? Como isso afetará o desempenho? Isso afetará o desempenho de alguma forma após uma boa normalização?

Quais colunas geralmente são indexadas se você já possui a chave primária e a chave estrangeira?

Parece que já é eficaz normalizar um banco de dados. Mas, eu posso ter pulado como a indexação afeta o banco de dados. Isso só é eficaz quando as consultas são usadas? Como isso funciona / executa e melhora um banco de dados?

Franz Noel
fonte
5
Quais colunas geralmente são indexadas se você já possui a chave primária e a chave estrangeira? Datas. Nomes. Qualquer coisa que você precise pesquisar ou classificar.
precisa saber é o seguinte
O índice na chave primária não conta?
CodesInChaos

Respostas:

34

Sim. De fato, você pode precisar prestar mais atenção aos seus índices. A normalização é sobre o armazenamento ideal . Isso geralmente está em desacordo com a velocidade de recuperação , pois são usadas consultas mais complexas com junções complicadas. Às vezes, as pessoas que mantêm bancos de dados que exigem velocidades rápidas de recuperação desregulamentam ou organizam seus dados em estruturas um pouco menos normalizadas para facilitar a recuperação.

GrandmasterB
fonte
21
O objetivo da normalização não é a eficiência do armazenamento, mas a remoção das dependências de inserção, atualização e exclusão.
4
Concordo com o @MichealT que não se trata de eficiência. Consistência lógica foi o que obtive do link.
Jeffo
Vou remover a polêmica palavra 'eficiência' (embora eu ache que basicamente resuma o objetivo geral da normalização) e apenas use a palavra 'ideal', deixando o que isso significa para o leitor. O objetivo real da normalização não é realmente relevante por que os índices ainda são necessários depois que um banco de dados é normalizado.
precisa
56

Acho que você não entendeu o que a indexação faz para o desempenho do banco de dados.

Um índice ajuda o banco de dados a encontrar linhas. Os índices são estruturas de dados especializadas que, em troca de espaço em disco extra e algum desempenho ao inserir e atualizar, ajudam o mecanismo de banco de dados a permanecer em linhas correspondentes.

Como eles ocupam espaço extra e custam (um mínimo de) desempenho para mantê-los atualizados, você como designer de banco de dados deve criar índices explicitamente para se adequar aos padrões de aplicativos e consultas.

Os índices são ortogonais à normalização do banco de dados.

Martijn Pieters
fonte
4

Sim após a normalização, você ainda precisa da indexação.

As tabelas com as quais você está trabalhando se beneficiam tanto quanto as tabelas que você tinha antes da normalização. Na realidade, por si só, são iguais: tabelas.

Uma coisa que você deve considerar é que os índices ajudam a encontrar os dados mais rapidamente. A normalização do design de um banco de dados é sempre boa, mas às vezes por motivos de desempenho, é necessário desnormalizar a implementação. Mas isso é apenas caso a caso.

Pieter B
fonte
2

Sim.

Os índices são um método para acelerar a pesquisa dos dados. Algumas consultas são feitas por chaves primárias, que geralmente são indexadas implicitamente pelo mecanismo de banco de dados, mas é provável que outras consultas usem outras colunas. Muitas vezes, algumas consultas pesquisam colunas que nem são únicas e, portanto, não podem se tornar chaves primárias após qualquer normalização. Você provavelmente terá que indexar essas colunas.

Há apenas uma maneira de saber quais índices criar. Tire todas as consultas no aplicativo, encontrar parâmetros exemplo representativo para eles e ter o motor de banco de dados mostrar seus planos de consulta (todos os motores de banco de dados têm EXPLAIN, EXPLAIN QUERY PLANou comando similar; ele é chamado de forma diferente em diferentes motores) e teste quanto tempo demora. Do que criar índices que aceleram os que eram lentos. E não esqueça de soltar novamente os índices que você tentou, mas não ajudou a evitar o desperdício de recursos.

Jan Hudec
fonte
1

Os índices geralmente são necessários em todas as tabelas, exceto as menores. Praticamente todas as chaves estrangeiras devem ser indexadas e apenas configurar um FK não significa que você tenha um índice (pelo menos não em alguns bancos de dados, verifique a documentação do banco de dados). Os campos nos quais você frequentemente se junta ou usa as cláusulas where devem ser indexados, se forem aqueles que se beneficiariam (você precisa de uma certa quantidade de variabilidade nos dados para que os booleanos não se beneficiem, por exemplo) e aqueles onde é possível indexar.

No entanto, cada índice reduz a velocidade de inserções \ atualizações \ exclusões enquanto acelera a seleção, portanto, escolha seus índices com cuidado.

Os índices são críticos para o desempenho aceitável em um banco de dados.

HLGEM
fonte
0

Para uma terceira forma normal, você definitivamente precisará de índices em todas as chaves primárias.

A necessidade de outros índices depende de como o banco de dados é usado. Por exemplo, se você procurar regularmente clientes em um código postal específico, pode ser uma boa ideia indexar a coluna zip_code na tabela de clientes.

James Anderson
fonte