Skip to content

Criando um índice CLUSTERED

25/09/2011

Em uma tabela podemos ter somente uma ordem de classificação física e, portanto, apenas um índice clusterizado (não obrigatório mas recomendado).

Ao criar uma chave primária, por padrão será clusterizado se não houver já um índice clustered, mas é opcional criarmos não clustered, como demonstrado nesse exemplo, apenas para efeito prático de criação de um índice.
Segue o exemplo:

CREATE TABLE Pessoa(
  IdPessoa int identity 
    constraint pk_pessoa primary key 
    nonclustered, -- PK proposital nonclustered 
  Nome varchar(50),
  DataNascimento datetime,
  NumeroRg int
);
GO

-- populando a tabela
INSERT Pessoa(Nome, DataNascimento, NumeroRg)
SELECT top 5000
  'nome ' + CAST(ABS(O.object_id) AS VARCHAR),
   modify_date,
   ABS(O.object_id) + 1
FROM sys.all_objects O 


-- criando um índice clustered em coluna não PK
CREATE CLUSTERED INDEX idx_Pessoa_NumeroRg
ON Pessoa(NumeroRg)
GO

Efetue as seguintes consultas habilitando o Execution plan (Ctrl+M):

-- executando a consulta habilitando o Execution plan
select top 10 * 
from Pessoa
where DataNascimento >= '2008-01-01' 

select top 10 * 
from Pessoa
where NumeroRg > 500

A saída do plano de execução mostra que o otimizador da consulta usou na primeira consulta o “Index Scan” e na segunda consulta um “Index Seek” (melhor).

Index Seek e Index Scan

Anúncios

From → Transact-SQL

Deixe um comentário

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: