CLUSTERED INDEX

ICHIHARA 11/07/2005 17:21:58
#93466
Oque eh um clustered index?

Onde eu utilizo?

USUARIO.EXCLUIDOS 11/07/2005 17:36:15
#93473
Resposta escolhida
Basicamente os Indices cluster são indices organizados fiscamente no banco. No sql server estes indices são criados default quando vc define a PK. (podendo ser alterado)
Vantagens..- por ser fisico bo banco, a consulta fica muito mais rápida.
Desvantagens, - por ser fisico, quando vc tem uma tabela que contenha muitas linhas , tenha muitas inserções e o dado que vai pro indice não é ordenado, pode te deixar a atualização de dados demorada.
Uma coisa que vejo acontecer bastante é já se descartar um indice cluster caso esta tabela tenha muita inserção...não se levando em conta justamente o que eu disse..se por acaso o campo ou campos que sejam o indice cluster são ordenados; Por exemplo..digamos que vc tenha uma tabela que tenha um inidce cluster num campo identity, cada inserção que for feita sempre vai ser pro final..ou seja...não terá uma inserção no meio, tendo que fazer o indice cluster ser reorganizado (e como é fisico..mais demorado).
Eu via de regra uso em campos data.
Basicamente isso...no BOL tem mais explicações sobre o assunto.
ICHIHARA 12/07/2005 09:03:01
#93563
Sabia que era voce que ia responder!

Entao Laerte, Tinha uma consulta que demorava 2 mim para ser executada e ela tinha um index no campo Prop, depois eu mudei esse index para cluster, agora ele demora 10 segundos!
Com relacao a muitas insercoes isso acontece na minha tabela... quer dizer que terei problemas?
E seu eu agendar uma Job para fazer o reindex??

Muito Obrigado
Alexandre.
ICHIHARA 12/07/2005 12:14:06
#93613

.
USUARIO.EXCLUIDOS 13/07/2005 09:11:09
#93834
Na verdade a manutenção de indices, bem como a otimização faz-se necessária..seja por jobs ou manulamente.Bancos com tabelas muito grandes, tem que se tomar cuidado com isso, mas via de regra deixe- em JOB (Database manintaince). Uma checagem das tabelas (caso elas sejam muito usadas , grandes e tenham muitos indices) tb faz-se necessário (dbcc checktable) ou até mesmo um dbcc checkdb. MAs quem vai decidir isso é vc..tem a recceitinha de bolo...mas tuning na verdade é tentativa e erro, com base em alguns principos desta receitinha.
Sobre sua tabela..este campo que vc criou o cluster, ele é continuo?..tipo...vc tem o campo prop com valores 1,2,3,4,5... o proximo será o 6, depois o 7...ou é muito variado ?.
Se for muito variado, vc PODE ter problemas..se for uma tabela muiiiito grande..mas caso seja pequena..vc pode ir verificando como anda as inserções nesta tabela...se por acaso abaixou muito a performance (o que eu acho que não)
Mas antes de colocar um campo como clustered index..vc analisou o plano de execução pra esta querie ?..qual o tipo de index que está sendo usando nesta consulta (ou se está).
As vezes, pode estar acontecendo os famosos bookmarkÂÂÂ's lookupÂÂÂ's que vc consegue, na maioria das vezes, driblá-los com um Covered Index (indice coberto).
Faz isso primeiro...veja se vc pode melhorar tua consulta analisando o plano de execução..pra depois tomar a medida necessária
ICHIHARA 13/07/2005 13:31:46
#93930
Os numeros sao aletorios... e eu ja criei o index...
Eu posso ir la e deletar ele e criar o index novamente?
O reindex nao adianta?
Como se cria um covered index?

Abraco
ALexandre!
USUARIO.EXCLUIDOS 13/07/2005 15:02:34
#93967
Deixa este index e vê como se comporta as inserções nesta tabela.
Pra se dropra um indice use drop index (olhe no bol a sintaxe)
Sim..como eu disse o reindex faz-se necessário, mas a frequencia isto depende muito do teu ambiente...via de regra deixe o default do schedule no Database Manintaince pra vc iniciar e depois fazer a análise
Antes de falar sobre os covered index...vamos falar sobre os bookmakÂÂÂ's lookupÂÂÂ's.
Estes acontecem quando é usado o indice no select, mas este não comporta os campos pedidos por este select, ou estão em ordem diferente. Ou seja..digamos que vc tenha um indice numa tabela que tenha o campo codigo neste indice.
Se vc der um select codigo, nome..where codigo = x..vai provavelmente usar este indice..mas vai te criar um bookmark lookup pois o nome (que está no teu select) não faz parte do indice..ou seja...ele vai usar o indice pra consulta, mas vai ter que procurar o nome pois este não é contemplado pelo indice.
Neste caso, se vc colocar o Nome junto com o codigo no teu indice provavelmente vai te tirar o bookmark lookup.
Mas veja bem, antes de se fazer isso tem que analisar bem os teu indices e o impacto que vai ocorrer se vc mudar ele ou dropar ou até mesmo criar indices..não saia criando indices sem antes analisar bem teu ambiente..pois se eles são de grande ajuda nas consultas, podem atrazar sua vida nas atualizações, reindexações....etc..TRabalhe com muita cautela nisso
ICHIHARA 14/07/2005 09:15:39
#94073
Valeu Laerte!

Nao entendi essa parte?

"Neste caso, se vc colocar o Nome junto com o codigo no teu indice provavelmente vai te tirar o bookmark lookup. "

Me da um exemplo?

Entao, criei uma job para rodar de madrugada aqui... pois nao existe atividade nesse horario no DB.
USUARIO.EXCLUIDOS 14/07/2005 09:28:46
#94080
Por exemplo..digamos que vc tenha uma tabela com campos codigo (int) ,nome (char10) e tipo (int)..
pode fazer este teste no querie analuzer mesmo pra vc ver

Crie esta tabela e coloque a PK como o codigo (ele vai ter criar um clustered index automatico neste campo) e coloque outro indice (nonclustered - ouseja normal ) no
campo Tipo.
No query analizer digite "select tipo,nome from tabela where tipo = 1"
e rode o plano de execução..vai quer tera uma provavel referencia de index seek neste select e uma referncia de bookmark lookup pois o indice não contempla o campo nome..somente o campo tipo (esqueca do clustered..ele nem faz parte do contexto do select acima)
Altere este indice pra Tipo e Nome (indice composto)...e faça o mesmo procedimento..
a refrencia de bookmark lookup já não existe mais..pois o indice contempla os campos que pediu no select.
Verifique o custo de cada referencia no teu plano de execução.., de resto é contigo véio....
Tópico encerrado , respostas não são mais permitidas