Visão geral do índice do SQL Server
Ao falar sobre o ajuste de desempenho e aprimoramento de consultas do SQL Server, a primeira coisa a considerar é o Índice do SQL Server. Ele serve para acelerar a leitura de dados de tabelas subjacentes, fornecendo acesso rápido às linhas solicitadas. Assim, não será necessário varrer todos os registros da tabela.
O índice do SQL Server fornece esses recursos de pesquisa rápida devido à estrutura B-Tree do índice. Essa estrutura possibilita percorrer as linhas da tabela com base na chave de índice rapidamente e recuperar os registros solicitados de uma só vez. Não será necessário ler a tabela inteira.
Tipos de índices do SQL Server
Entre os principais tipos, destacamos os índices clusterizados e não clusterizados.
O índice em cluster classifica os dados reais nas páginas de dados de acordo com os valores de chave de índice clusterizado. Ele armazena os dados no nível ‘folha’ do índice, garantindo a possibilidade de criar apenas um índice clusterizado em cada tabela. O índice clusterizado é criado automaticamente quando uma restrição de chave primária aparece na tabela de heap.
O índice não agrupado contém o valor da chave de índice e um ponteiro para o restante das colunas de linha na tabela principal. É o nível 'folha' do índice, com a capacidade de criar até 999 índices não agrupados em cada tabela.
Se sua tabela não tiver nenhum índice clusterizado criado nela, a tabela é chamada de 'tabela Heap'. Essa tabela não tem critérios para especificar a ordem dos dados dentro das páginas e a classificação e vinculação das páginas.
Quando um índice clusterizado é criado nessa tabela, chamamos a tabela classificada de tabela clusterizada.
Existem outros tipos de índices fornecidos pelo SQL Server também:
- O índice Unique impõe a exclusividade dos valores da coluna;
- O índice de cobertura contém todas as colunas solicitadas pela consulta;
- O índice composto contém várias colunas na chave de índice;
- Outros tipos de índice específicos são índices XML, Spatial e Columnstore.
A vantagem do índice do SQL Server é que ele melhora o desempenho das consultas. No entanto, funciona se apenas o índice estiver correto. Se você o projetar incorretamente, isso afetará negativamente o desempenho das consultas e consumirá os recursos do SQL Server para armazenar e manter índices inúteis.
Escolher o melhor índice que corrige todos os problemas não é uma tarefa fácil. Adicionar um novo índice pode acelerar o processo de recuperação de dados, mas retarda os processos de modificação de dados. Qualquer alteração realizada na tabela subjacente é refletida diretamente em todos os índices relacionados para manter os dados consistentes.
É por isso que você deve estudar e testar o impacto do novo índice antes de criá-lo no ambiente de produção. Também é necessário monitorar seu impacto e uso após implantá-lo no ambiente de produção.
Fatores a serem considerados ao projetar um novo índice do SQL Server
O primeiro fator é o tipo de carga de trabalho do banco de dados . Suponha que lidamos com uma carga de trabalho OLTP com um grande número de operações de gravação. Requer o menor número possível de índices. Outro caso é uma carga de trabalho OLAP com muitas operações de leitura – exigirá o maior número possível de índices para acelerar a recuperação de dados.
Além disso, você precisa observar o tamanho da tabela . O SQL Server Engine prefere verificar a tabela subjacente diretamente, em vez de perder tempo e recursos na escolha do melhor índice para a recuperação de dados dessa pequena tabela.
Depois de decidir criar um índice nessa tabela, você precisa identificar o tipo de índice para veicular sua consulta . Lá, você especifica as colunas adicionadas à chave de índice. As bases são o tipo de dados da coluna e a posição nos predicados de consulta e condições de junção.
Esses fatores devem garantir o melhor desempenho de recuperação de dados, na ordem correta, e manter o índice o mais curto e simples possível.
Outro fator a ser considerado ao projetar um novo índice é o armazenamento de índice . É recomendável criar índices não clusterizados em um grupo de arquivos e unidade de disco separados. Dessa forma, você isola as operações de E/S executadas nas páginas de dados de índice dos arquivos de dados do banco de dados.
Considere definir o índice FILFATOR , que determina a porcentagem de espaço em cada página de nível de folha preenchida com dados (o valor difere do padrão 0 ou 100 por cento). O objetivo é deixar espaço em cada página de dados de índice para os registros recém-inseridos ou atualizados. Também minimiza a ocorrência de divisão de páginas que pode levar ao problema de fragmentação do índice.
Gerenciamento de Índice
A função do administrador de banco de dados em aprimorar o desempenho das consultas com índices do SQL Server não se limita à criação do índice. Você deve monitorar proativamente o uso do índice para identificar sua qualidade. Além disso, precisamos manter o índice regularmente para corrigir os problemas de fragmentação.
O SQL Server Management Studio, com sua robusta funcionalidade de relatórios, fornece os dados estatísticos mais úteis para os administradores de banco de dados. Um desses relatórios integrados é o Index Usage Statistics :
O relatório Estatísticas de uso do índice descreve como os índices do banco de dados são usados na forma de:
- Procura :o número de vezes que o índice é usado pelo SQL Engine para localizar uma linha específica.
- Digitalizações :o número de vezes que as páginas de folha de índice são verificadas pelo SQL Engine.
- Pesquisas :o número de vezes que um índice não clusterizado foi usado como índice clusterizado para recuperar o restante das colunas não listadas no índice não clusterizado.
- Atualizações :o número de vezes que os dados do índice são modificados.
Observe que o objetivo principal da criação do índice é realizar uma operação de busca de índice, conforme mostrado abaixo:
O relatório anterior ajuda significativamente a especificar se o SQL Server aproveita ou não esses índices para acelerar o processo de recuperação de dados. Se algum índice específico não funcionar como deveria, descarte-o e substitua-o por um melhor.
O segundo relatório fornecido pelo SSMS é o Index Physical Statistics . Ele retorna as informações estatísticas sobre a porcentagem de fragmentação do índice por cada partição de índice, com o número de páginas em cada partição de índice.
Ele também recomenda como corrigir os problemas de fragmentação do índice reconstruindo ou reorganizando esse índice, de acordo com a porcentagem de fragmentação, conforme mostrado abaixo:
Para aplicar as recomendações fornecidas pelo relatório, você pode executar o comando de desfragmentação de índice para cada índice. Ou você pode criar um plano de manutenção usando o SSMS para manter o índice da melhor maneira.
Gerenciador de Índice dbForge
O dbForge Index Manager é um suplemento do SSMS, servindo para detectar e corrigir os problemas de fragmentação de índices do SQL Server.
Também é uma ferramenta centralizada, oferecendo a capacidade de detectar a porcentagem de fragmentação do índice nos bancos de dados. Você pode corrigir esses problemas executando uma reconstrução de índice. Outra maneira é reorganizar as operações, com base na gravidade da fragmentação desse índice. Entre outras opções, há a geração de scripts T-SQL para execução de comandos relacionados ao índice, exportação dos resultados da análise do índice para referência posterior e uso da interface de linha de comando para automatizar as tarefas de manutenção do índice.
O dbForge Index Manager está disponível na página de download do Devart. Você pode instalá-lo em sua máquina usando um assistente de instalação simples. Após a instalação bem-sucedida, este suplemento está pronto para uso.
Para usá-lo no SSMS, clique com o botão direito do mouse no banco de dados e escolha Gerenciar fragmentação de índice da lista do Gerenciador de Índices:
Na janela Index Manager, você pode filtrar o nome do banco de dados que lhe interessa.
Clique em Reanalisar para executar a verificação de fragmentação do índice para o banco de dados selecionado. Ele mostra automaticamente as estatísticas de fragmentação de índice para todos os índices criados no banco de dados selecionado durante esse processo.
A ferramenta Index Manager também recomenda as ações para corrigir os problemas de fragmentação do índice, com base na porcentagem de fragmentação:
A verificação dos índices na seção Ações necessárias na janela anterior possibilita exportar a lista de ações como um relatório CSV. Ele permite que você execute a correção sugerida reorganizando ou reconstruindo índices problemáticos diretamente dessa página ou gerando um script para fazer isso posteriormente:
A correção da fragmentação do índice em nosso cenário será a seguinte:
Se você executar o script anterior ou clicar no botão Corrigir opção e, em seguida, Reanalisar o resultado, você vê que o problema de fragmentação é corrigido diretamente:
Dessa forma, aproveitamos o dbForge Index Manager para analisar e identificar os problemas de fragmentação do índice e depois reportá-los ou corrigi-los diretamente do mesmo local.
Ferramenta útil
O dbForge Index Manager traz correção inteligente de índice e fragmentação de índice diretamente no SSMS. A ferramenta permite coletar rapidamente estatísticas de fragmentação de índice e detectar bancos de dados que requerem manutenção. Você pode reconstruir e reorganizar instantaneamente os índices do SQL Server no modo visual ou gerar scripts SQL para uso futuro. O dbForge Index Manager para SQL Server aumentará significativamente seu desempenho sem muito esforço.