Array
(
)

Trocando o indice cluster da PK para um index unique

Felipe_cduarte
   - 02 ago 2004

Fala pessoal,

tenho uma duvida : tenho uma tabela que a chave é um campo identity desprovido de qualquer sentido, e um index unique que mantem a integridade. A pergunta é o seguinte : se eu trocar o indice cluster minhas consultas serão mais rapidas ?? tenho pouca experiencia no Execution Plan ... se alguem puder me ajudar agradeço

[]´s

Marcus.magalhaes
   - 04 ago 2004

Felipe, bom dia.

O índice cluster não precisa ser sua PK, sendo assim, vc pode criar um índice cluster referenciando as colunas que vc mais usa para realizar suas consultas.

Ex.
Create Table Cliente
(
id Int Identity (1, 1),
cpfcli Int NOT NULL -- maior ocorrencia de consultas
nome VarChar(30) NOT NULL,
Constraint PK_CLIENTE Primary Key NonClustered
(
id
) With FillFactor = 100
)
GO
Create Clustered Index idx_cpfcli_CL On Cliente (cpfcli) with FillFactor = 90
GO

PS.: nunca crie um índice clustered com mtas colunas, pois ele será a base para todos os índices nonclustered.
PS2: O índice clustered deve ser o primeiro a ser criado e o último a ser apagado, assim os índices nonclustered não será refeitos devido à mudando de posicionamento das linhas dentro das páginas da tabela.

Att,

Felipe_cduarte
   - 05 ago 2004

Fala Marcus blz ??

Valeu por mais este esclarecimento, só um detalhe ... esse fill factor serve para que ?

Marcus.magalhaes
   - 05 ago 2004

Bom dia Felipe, blz?

O FillFactor indica o percentual de ocupação que uma página de indice terá no momento da criação do índice e no momento da reindexação. Isto ajuda a prevenir o split de páginas, ou seja, qdo se insere/altera uma nova linha e não há espaço para ela, o sql tem q criar uma nova página de índice e/ou dados, acertar os ponteiros de/para esta página e redistribuir o conteúdo das páginas.

Caso o índice seje um clustered, lembre-se q a página de dados será a página de índices.

Este comando da forma q coloquei atinge somente às páginas folhas (leaf level) da arvore balanceada (B-Tree - estrutura utilizada pelos gerenciadores de bds para distribuir os dados), para que este fator afete todos os níveis é necessário acrescentar a seguinte opção : PAD_INDEX e o comando fica assim :

Create Clustered/NonClustered Index nome_do_indice On tbl(col) With FillFactor = xx, PAD_INDEX

Att,