MCDBA Brasil


  • Home
  • Sobre
  • Contato

Livros





Links Rápidos

SQL Server Builds (All Versions/Editions)


Download SQL Server 2017 (trial)


SQL Server 2017 Feature Pack


SQL Server 2016 Feature Pack


Cumulative Update SQL Server 2017 builds


Cumulative Update SQL Server 2016 builds


Cumulative Update SQL Server 2014 builds


Cumulative Update SQL Server 2012 builds


SQL Server 2005/2008 Samples Databases


Documentando o Servidor SQL Server


Analisando a Performance do Servidor-CheckList


Virtual PASS PT


Faça parte do maior virtual chapter do PASS com conteúdos técnicos em Português sobre SQL Server.

Todos os meses um evento Online para você! Acompanhe aqui os WebCasts já agendados

Sindicalize seu blog ou site ao VirtualPASSPT

SQL Server Blogs

SQL Server Query Processing Team


SQL Programmability & API Development Team


SQL Server Manageability Team


Latin America Support Team


Database + Disk + Performance


Microsoft SQL Server Support


SQL CLR Team


SQL Query Optimization Team


SQL 2005 Code Samples


SQL Server Express Team


SQL SMO Samples


SQL Storage Engine Team


SQL CAT Team


SQL Protocols Team


PSS SQL Server Engineers


Slava Oks on SQLOS


Ken Henderson’s blog


LUTI@Microsoft Blog


kimberly L. Trip’s blog


Fernando Garcia Blog

Dica da Semana

Recriando índices com a cláusula DROP_EXISTING

por Nilton Pinheiro novembro 8, 2004 Nenhum comentário

Quando um índice nonclustered encontra-se em uma tabela sem índice clustered, ele fará uso do que chamamos de RowID, rowid é um código que define o posicionamento físico das linhas dentro do arquivo de dados. Porém, quando existe índice clustered em uma tabela, o índice nonclustered utiliza a chave do índice clustered para localizar as linhas na tabela e não o rowID. O uso da chave do índice clustered é bem mais eficiente do que o uso do rowID. Por isso, fica aqui a recomendação de que sempre que possível crie um índice clustered em suas tabelas.


Agora imagine uma situação em que você deseja eliminar e recriar o índice clustered de uma tabela. Se a tabela for pequena o problema não será notado, mas em tabelas com grandes volumes o consumo de CPU para a realização desta tarefa é gigantesco.


Ao eliminar o índice clustered de uma tabela, o SQL Server precisa eliminar também todos os índices nonclustered e posteriormente recriá-los, pois como eles estavam usando a chave do índice clustered, precisarão agora passar a usar o rowID no índice nonclustered.


Terminada essa longa tarefa, você irá então criar novamente o índice clustered com as suas alterações. Este processo de nova criação do índice clustered fará com que todos os índices nonclustered mais uma vez sejam eliminados e recriados, com o objetivo de mais uma vez, trocar o rowID que está sendo usando, pela chave do novo índice clustered.


Embora o processo de eliminação e recriação de um índice clustered pareça simples, podemos perceber que quando realizado em tabelas muito grandes e principalmente em tabelas que possuem um grande número de índices nonclustered, pode ser bem dispendioso em custo de CPU.


Uma alternativa para minimizar este impacto no servidor SQL Server, é fazer a criação do novo índice clustered usando a cláusula DROP_EXISTING do comando CREATE INDEX. Com essa cláusula, você não precisará eliminar o índice clustered existente utilizando o comando DROP INDEX para depois recriá-lo com o comando CREATE INDEX. Ao utilizá-la você estará dizendo ao SQL Server que está substituindo o índice existente por um novo com novas configurações. Isso permite ao SQL Server fazer uma transição automática dos índices nonclustered, diretamente do índice clustered antigo para o índice clustered novo, evitando assim o consumo de tempo de CPU com a passagem dos índices nonclustered para rowid e depois, de volta para a nova chave do índice clustered.


Para utilizar a cláusula drop_existing faça como o exemplo abaixo, onde criamos um índice na tabela authors2 do banco de dados Pubs e depois o recriamos usando a cláusula drop_existing de forma a adicionar uma nova coluna ao índice:


USE pubs
GO
CREATE CLUSTERED INDEX au_id_ind
   ON authors2 (au_id)
WITH FILLFACTOR = 80
GO


sp_helpindex authors2
index_name      index_description                index_keys       
————— ——————————– —————–
au_id_ind       clustered located on PRIMARY  au_lname
aunmind         nonclustered located on PRIMARY  au_lname, au_fname



— Recria o índice CLUSTERED utilizando a cláusula DROP_EXISTING
CREATE CLUSTERED INDEX au_id_ind
   ON authors2 (au_id,au_fname)
   WITH DROP_EXISTING



sp_helpindex authors2


index_name     index_description                index_keys       
————– ——————————– —————–
au_id_ind      clustered located on PRIMARY au_id, au_fname
aunmind        nonclustered located on PRIMARY  au_lname, au_fname


 


Nota: Para mais informações sobre a cláusula DROP_EXISTING consulte o BOL do SQL Server 2000



 

Avaliação:
Compartilhe:
  • Anterior Backup e Restauração no SQL Server 200021 anos atrás
  • Próximo Desfragmentação de Indices – Melhores Práticas21 anos atrás

Deixe uma resposta Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

MVP Reconnect Award

Categorias

  • Artigos (359)
  • Dica da Semana (95)
  • Documentação (54)
  • Downloads (113)
  • MSDE 2000 (3)
  • Sem categoria (1)
  • Tutoriais (9)

Posts recentes

  • #FechouBrasil #PartiuPortugal
  • Brigando com o erro “The cached MSI file is missing”
  • MCDBABRASIL está de volta
  • Documentando o Servidor SQL Server
  • Brigando com os Erros 17182, 17826 e 17120

SQL Server AlwaysOn Video Series

Video1: Introdução ao SQLServer2012 AlwaysOn


Video2: Introdução ao SQLServer2012 AlwaysOn Availability Group


Video3: Introdução ao SQLServer2012 AlwaysOn AVG-Demo


Video4: Introdução ao SQLServer2012 AlwaysOn Listener


Video5: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries


Video6: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries-Demo


Video7: Introdução ao SQLServer2012 AlwaysOn Failover Clustering


Serie SQL Server Failover Clustering End-to-End

Parte 1: Configuração da Rede e Ambiente


Parte 2: Configurando o Windows 2008 R2 Domain Controler e DNS


Parte 3: Preparando os nós para o Failover Cluster


Parte 4: Configurando um Failover Cluster de 2 nós


Parte 5: Configurando as LUNs no iSCSI Software Target (Parte 1)


Parte 6: Configurando as LUNs no iSCSI Software Target (Parte 2)


Parte 7: Apresentando as LUNs para os nós do Failover Cluster


Parte 8: Configurando os discos no Failover Cluster


Parte 9: Instalando a primeira instância virtual do SQL Server 2008


Parte 10: Instalando a segunda instância virtual do SQL Server 2008


Parte 11: Instalando e Configurando o MSDTC no Failover Cluster


Parte 12: Configurando Mount Points no Cluster e SQL Server 2008


Vídeo Extra: Removendo uma Instância do SQL Server 2008 R2 em Cluster


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering Overview


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering na Prática

Menu

  • Home
  • Sobre
  • Contato

Mais

  • RSS Feeds
2025 MCDBA Brasil.