Banco de Dados

13 set, 2018

8 dicas para criar índices mais eficientes

Publicidade

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 artigo 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 artigo de hoje, eu queria lembrar que eu já comecei a falar sobre índices; veja o artigo: “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 característica 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 artigo temos alguns termos novos, que talvez os DBAs iniciantes estranhem um pouco, mas tomara que vocês não se assustem. Pesquisem na documentação do SQL Server e terão explicações detalhadas de cada um destes recursos citados e não detalhados neste artigo.

Agenda

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