Projetando e criando índices clusterizados

A criação de índices clusterizados possibilita a reorganizam dos dados tanto logicamente quanto fisicamente em seu banco de dados.

 

O SQL Server armazena os dados no disco rígido em páginas de 8KB dentro dos arquivos de banco de dados. Por padrão, essas páginas e os dados não estão organizados. Uma solução que proporcione uma melhoria neste cenário é a criação de índices. Há dois tipos de índices que podem ser criados em uma tabela: clusterizados (clustered) e não clusterizados (no clustered).

 

Os índices clusterizados fisicamente reorganizam os dados que os usuários inserem nas tabelas. A organização de um índice clusterizado no disco é comparável ao de um dicionário, porque ambos usam o mesmo paradigma de armazenamento. Se for necessário procurar uma palavra no dicionário — por exemplo, Computador — como você faria? Você poderia procurar direito na seção C do dicionário e continuar através da lista em ordem alfabética até você encontrar a palavra computador. O processo é semelhante com um índice clusterizado; um índice agrupado em uma coluna sobrenome colocaria Alexandre fisicamente antes de Bruna no arquivo de banco de dados. Dessa maneira, o índice pode identificar mais facilmente os dados nas páginas.

 

Também pode ajudar a visualizar o SQL Server como uma árvore de cabeça para baixo. Na verdade, a estrutura de índice é denominada uma estrutura de árvore B (binary-tree). Na parte superior da estrutura da árvore B, você encontrar a página raiz; ela contém informações sobre o local das outras páginas mais abaixo chamada páginas de nível intermediário. Essas páginas intermediárias contêm mais valores-chaves que podem apontar para outras páginas de nível intermediário ou páginas de dados. As páginas na parte inferior de um índice clusterizado, as folhas, contêm os dados reais, que são fisicamente organizados em disco de acordo com as restrições do índice, conforme mostrado na figura abaixo.


18-10-2007pic01.JPG
 

Em uma tabela sem um índice de clusterizado criado (chamado de heap), os novos dados são inseridos no fim da tabela, que é a parte inferior da última página de dados. Se nenhuma das páginas de dados tiver espaço, ele aloca uma nova página e inicia preenchendo com os dados, conforme mostrado na figura abaixo.


18-10-2007pic02.JPG 

 

Trabalhando com um índice de clusterizado, o SQL Server não mais terá a liberdade de fazer o que dissemos acima referente a novos dados em uma tabela. Os dados ficaram fisicamente colocados em ordem. Para fazer isso, precisamos deixar algum espaço no final de cada página de dados em um índice de clusterizado. Esse espaço em branco é conhecido como o fator de preenchimento. Um fator de preenchimento alto fornece menos espaço e um fator de preenchimento menor oferece mais espaço. Se você especificar um fator de preenchimento de 70, para exemplo, a página de dados é preenchida com 70 por cento de dados e 30 por cento de espaço em branco. Se você especificar 100, a página de dados é preenchida com quase 100 %, deixando espaço para apenas um registro na parte inferior da página.

 

Para ilustramos nossa implementação, vamos tomar como referência o banco de dados Sales, a tabela Customers que contém informações de clientes. Os representantes de vendas estão reclamando de lentidão no acesso. Você sabe que os representantes de vendas pesquisam clientes com base em seus códigos de CEP com bastante freqüência, portanto, você decide criar um índice de clusterizado na coluna ZIP da tabela Customers para melhorar o tempo de acesso aos dados.

 

Para criar um índice clusterizado que chamamos de ind_zip, siga os seguintes passos:

 

   1. Abra o SQL Server Management Studio, e se conecte usando Windows Authentication.

   2. Em  Databases, escolha a base de dados SALES, e depois a tabela dbo.Customers.

   3. Sobre a pasta Indexes, clique com o botão direito e selecione New Index.

   4. Entre com o nome do índice ind_zip na caixa Index name.   

   5. Selecione o tipo de índice para Clustered.

   6. Clique no botão Add e escolha a coluna da tabela dbo.Customers na qual você irá

   criar o índice.

   7. Selecione a coluna zip, clicando em OK para retornar a janela anterior.

   8. Por fim, clique  em OK para criar o índice.

 

Neste artigo, você aprendeu como projetar e criar um índice clusterizado visando melhorar a performance de suas consultas ao banco de dados.