Published on

May 12, 2019

Compreendendo Índices no SQL Server

Índices bons são cruciais para um desempenho ótimo no SQL Server. Para criar índices eficazes, é importante entender o que são índices e como o SQL Server os utiliza para avaliar consultas. Neste artigo, exploraremos os conceitos básicos de índices, os tipos de índices no SQL Server e como eles são usados.

O que é um Índice?

Um índice é uma estrutura dentro do SQL Server que permite a rápida recuperação de linhas específicas dentro de uma tabela. Pense em um índice como o índice de um livro, onde você pode encontrar rapidamente informações específicas. Da mesma forma, um índice no SQL Server é definido em uma ou mais colunas, conhecidas como colunas-chave. Essas colunas-chave são os valores pelos quais o índice será usado para pesquisar. Assim como um índice de livro, o índice é ordenado pelas colunas-chave.

Se um índice for criado com mais de uma coluna-chave, ele é chamado de índice composto. A estrutura geral de um índice é a de uma árvore balanceada, também conhecida como árvore B. O índice consiste em uma única página raiz, zero ou mais níveis intermediários e um nível folha. Cada página é um pedaço de 8 kilobytes do arquivo de dados, identificado por uma combinação de ID de Arquivo e número de página.

Índices Clusterizados e Não Clusterizados

No SQL Server, existem dois tipos principais de índices: índices clusterizados e índices não clusterizados. Um índice clusterizado define a ordem lógica da tabela e o nível folha do índice clusterizado contém as páginas de dados reais da tabela. Apenas um índice clusterizado pode ser criado por tabela. Se uma tabela não tiver um índice clusterizado, ela é chamada de heap.

Por outro lado, os índices não clusterizados são separados da tabela. O nível folha de um índice não clusterizado contém um ponteiro para a chave do índice clusterizado ou o Identificador de Linha (RID) para cada linha do índice. O RID é um identificador único para uma linha em um heap. Cada linha de um índice não clusterizado tem uma referência à linha de dados completa.

Limitações de Índices

Existem certas limitações nos índices do SQL Server. O tamanho de uma chave de índice é limitado a um máximo de 900 bytes e um máximo de 16 colunas. Chaves de índice maiores resultam em mais páginas no índice e uma árvore de índice mais profunda, o que pode diminuir a eficiência e usar mais espaço de armazenamento.

No SQL Server 2005 e versões anteriores, havia uma limitação de 250 índices por tabela (um clusterizado e 249 não clusterizados). No SQL Server 2008 e versões posteriores, essa limitação foi aumentada para 1000 índices (um clusterizado e 999 não clusterizados) com a adição de índices filtrados. No entanto, é importante observar que ter muitos índices pode aumentar o tamanho da tabela e afetar as operações de manutenção.

Como o SQL Server Utiliza Índices

Se uma tabela não tiver um índice, o SQL Server precisa ler toda a tabela para encontrar todas as ocorrências de um valor. No entanto, se uma tabela tiver um índice, ele acelera o processo de localização de valores de duas maneiras:

  1. O índice é ordenado na ordem das colunas-chave, permitindo que o SQL Server ignore a porção restante da tabela assim que todos os valores correspondentes forem encontrados.
  2. A estrutura de árvore do índice permite uma abordagem de dividir e conquistar para localizar linhas, excluindo rapidamente grandes porções da tabela da pesquisa.

O SQL Server pode realizar quatro operações básicas em um índice: varredura, busca, consulta e atualização. Uma varredura de índice envolve a leitura de todas as páginas folha do índice, enquanto uma busca de índice usa a estrutura de árvore B para localizar valores específicos ou o início de um intervalo de valores. Consultas ocorrem quando um índice não contém todas as colunas necessárias para uma consulta e o SQL Server precisa buscar as colunas restantes no índice clusterizado ou heap. Atualizações envolvem fazer alterações tanto na tabela base quanto em quaisquer índices que contenham as colunas afetadas.

Considerações para Criar Índices

Ao criar índices, existem várias considerações a serem observadas:

  • Índices clusterizados devem ser estreitos, pois a chave de clusterização faz parte de todos os índices não clusterizados.
  • Índices não clusterizados compostos são geralmente mais úteis do que índices de coluna única, a menos que as consultas filtrem uma coluna de cada vez.
  • Índices não devem ser mais largos do que o necessário para evitar desperdício de espaço e aumentar a sobrecarga de modificações de dados.
  • Se um índice for único, especifique-o como tal para ajudar o otimizador a gerar planos de execução mais otimizados.
  • Tenha cuidado ao criar muitos índices em tabelas frequentemente modificadas, pois isso pode retardar as modificações de dados.

Nas próximas partes desta série, aprofundaremos os índices clusterizados e não clusterizados, explorando suas diferenças e considerações para criá-los.

Certifique-se de ler todas as partes desta série:

  1. Os Conceitos Básicos de Índices
  2. O Índice Clusterizado
  3. O Índice Não Clusterizado
Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.