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

14

Depois de ter feito uma boa normalização, você ainda precisa indexar a tabela? Como isso afetará o desempenho? Será que isso afetará o desempenho de alguma forma depois de uma boa normalização?

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

Parece que já é efetivo normalizar um banco de dados. Mas, eu poderia 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 o banco de dados?

    
por Franz Noel 06.01.2013 / 23:16
fonte

6 respostas

34

Sim. Na verdade, talvez você precise prestar mais atenção aos seus índices. A normalização é sobre armazenamento ideal . Isso é muitas vezes incompatível com velocidade de recuperação , à medida que consultas mais complexas com junções complicadas são usadas. Às vezes, as pessoas que mantêm bancos de dados que exigem velocidades de recuperação rápidas desnormalizam ou organizam seus dados em estruturas um pouco menos normalizadas para facilitar a recuperação.

    
por 07.01.2013 / 05:25
fonte
56

Acho que você entendeu mal o que a indexação faz pelo 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 se conectar em linhas correspondentes.

Como eles ocupam mais espaço e custo (um mínimo) de desempenho para mantê-los atualizados, você, como designer de banco de dados, deve criar índices explicitamente para atender aos padrões de aplicativo e consulta.

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

    
por 06.01.2013 / 23:21
fonte
4

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

As tabelas com as quais você está trabalhando se beneficiam tanto quanto as tabelas que você tinha antes da normalização. Na verdade, sozinhos são exatamente os mesmos: tabelas.

Uma coisa que você deve considerar, porém, é que os índices ajudam você a encontrar seus dados com mais rapidez. Normalizar um design de um banco de dados é sempre bom, mas às vezes, por motivos de desempenho, é necessário desnormalizar a implementação. Mas isso é apenas caso a caso.

    
por 07.01.2013 / 00:15
fonte
2

Sim.

Índices são um método para acelerar a pesquisa dos dados. Algumas consultas são por chaves primárias, que são geralmente indexadas implicitamente pelo mecanismo do banco de dados, mas outras consultas provavelmente usarão outras colunas. Muitas vezes, algumas consultas são pesquisadas por colunas que não são exclusivas e, portanto, não podem se tornar chaves primárias após qualquer normalização. Você provavelmente terá que indexar essas colunas.

Existe apenas uma maneira de saber quais índices criar. Pegue todas as consultas no aplicativo, localize parâmetros de exemplo representativos para elas e faça com que o mecanismo de banco de dados mostre seus planos de consulta (todos os mecanismos de banco de dados possuem EXPLAIN , EXPLAIN QUERY PLAN ou comando semelhante; ele é chamado de maneira diferente em mecanismos diferentes) e teste por quanto tempo eles pegam. Do que criar índices que aceleram os que eram lentos. E não se esqueça de abandonar os índices que tentou, mas não ajudou a evitar o desperdício de recursos.

    
por 07.01.2013 / 09:21
fonte
1

Os índices geralmente são necessários em todas as tabelas, exceto nas 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). Campos com os quais você frequentemente se associa ou usa onde as cláusulas devem ser indexadas se são aquelas que se beneficiariam (você precisa de uma certa quantidade de variáveis nos dados para que os booleanos não se beneficiem por exemplo) e aquelas onde é possível indexar.

No entanto, todos os índices desaceleram inserções \ atualizações \ exclusões enquanto aceleram as seleções, portanto, escolha seus índices com cuidado.

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

    
por 14.03.2013 / 22:17
fonte
0

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

Se você precisa de outros índices, depende de como seu banco de dados é usado. Por exemplo, se você procura regularmente clientes em um CEP específico, pode ser uma boa ideia indexar a coluna zip_code na tabela de clientes.

    
por 15.03.2013 / 06:55
fonte