Na maior parte das vezes, quando eu vejo os índices criados por alguns desenvolvedores eu faço a associação mental com a minha casa após a visita das minhas primas… Uma bagunça!
Por isso resolvi escrever mais um post com algumas dicas para que vocês não sejam este tipo de desenvolvedor, que cria índices ao acaso, achando que eles irão magicamente melhorar o desempenho das suas consultas.
Antes de começar o post de hoje, eu queria lembrar que eu já comecei a falar sobre índices aqui no blog, veja o post “O que você precisa saber sobre índices no SQL Server”
Um dos recursos importantes para desempenho do banco de dados são os índices. Indíces são estruturas que otimizam leituras em tabelas ou views, e apesar de serem maravilhosos, precisam ser pensados com cuidado.
Quando um índice é criado o SQL Server cria uma estrutura de dados com as informações que fazem parte do índice, e esta estrutura que é percorrida para localizar os dados. Se a tabela possui muitos INSERTs, DELETEs e UPDATEs os índices podem ficar ineficientes e gerar uma tarefa a mais para o SGBD, que deverá tentar atualizar os índices a cada operação.
Quando optar por criar um índice, analise os seguintes aspectos:
1 – Verifique as características do BD, se tem mais I, D, U crie somente os índices necessários.
2 – Se o seu banco de dados não tem pausas para manutenção, ou as pausas são muito curtas, (principalmente no SQL Server 2017) pense na possilidade de utilizar o rebuild online dos índices.
3 – Para sistemas de DW , consultas com muitos dados, muitas agregações e análises em tempo real avalie o uso de indices columnstore.
4- Entenda a caracteristica das colunas que farão parte do índice:
- As melhores colunas são do tipo inteiro, exclusivas e não nulas
- Para colunas que tem muitos valores nulos e ou subconjuntos definidos de dados use índices filtrados
5 – Se a sua tabela estiver particionada, e divida em vários file groups seus índices também estarão;
6 – Indexar tabelas muito pequenas pode não trazer benefícios;
7 – Índices cluster devem ser curtos; em colunas exclusivas e não nulas
- Acessadas sequencialmente
- Identity
- Não sofra mudanças frequentes
- Sejam chaves pequenas (sem muitas colunas)
8 – Para os índices não cluster, considere colocar as colunas dos joins no índice e as colunas do select no include
Conclusão
Os índices são maravilhosos, ajudam muito, mas precisam ser pensados com muito cuidado para não virarem um estorvo.
Neste post tem alguns termos novos, que talvez os DBAs iniciantes estranhem um pouco… Mas tomara que vocês não se assustem… Dêm uma pesquisada na documentação do SQL Server e vocês terão explicações detalhadas de cada um destes recursos citados e não detalhados neste post.
Agenda
Você já deu uma olhada na agenda do blog? Todos os eventos que eu vou participar estão cadastrados lá!
Essa semana terei o prazer de participar do MSP Tech Days, no dia 13/09 às 21:20h. O evento será online e gratuito, e para participar é só acessar este link .
Estão todos convidados!!!
No dia 18/09/2018 teremos o nosso meetup mensal do Databases-SP, onde eu vou falar um pouco sobre Modelagem de Dados e o Juliano Atanazio vai fazer uma introdução ao PostgreSQL. Vai ser aqui em SP, na FCNuvem pertinho do metrô. Inscreva-se neste link.
Novidades
No mês de dezembro eu e a MVP Sulamita Dantas ministraremos um super curso de SQL Server em BH. Se você está interessado em participar deixe o seu e-mail em SQL4.Fun
Em breve o nosso site WDB.Consulting estará no ar, e ficaremos imensamente felizes com a sua visita