Trocando o indice cluster da PK para um index unique
02/08/2004
0
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
Felipe_cduarte
Posts
04/08/2004
Marcus.magalhaes
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,
05/08/2004
Felipe_cduarte
Valeu por mais este esclarecimento, só um detalhe ... esse fill factor serve para que ?
05/08/2004
Marcus.magalhaes
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,
Clique aqui para fazer login e interagir na Comunidade :)