Dicas

Índices duplicados nas tabelas do SQL Server.

Índices duplicados nas tabelas do SQL Server.

Saiba como encontrar todos os índices duplicados nas tabelas do SQL Server.

Qual a importância em saber quais são as tabelas que têm índices duplicados no SQL Server?
Quando você tem uma tabela com índices nas mesmas colunas, você acaba perdendo espaço em disco e perdendo performance nas operações DML do banco SQL Server. Por que sempre que você atualizar uma tabela, esse índice também tem que ser atualizado, com isso acaba-se perdendo performance.

Sendo assim você não querendo perder performance obviamente vai querer identificar quais são os índices que estão duplicados no seu banco de dados certo?

Olhando em alguns arquivos de scripts que eu tenho eu encontrei esse script que encontra todos esses índices.

Muito bem, eu vou deixar disponível para vocês duas versões a versão para que possa executar apenas na base de dados que você estiver logado e a versão que você possa executar em todas as bases de dados em apenas um script usando o mesmo conceito que eu já escrevi em um outro artigo aqui no blog que é “Executar o mesmo comando para todos os bancos de dados no SQL Server.

Script 1: Execute apenas na base de dados atual.

WITH indexcols AS
 (SELECT object_id AS id,
 index_id AS indid,
 name,
 
 (SELECT CASE keyno
 WHEN 0 THEN NULL
 ELSE colid
 END AS [data()]
 FROM sys.sysindexkeys AS k
 WHERE k.id = i.object_id
 AND k.indid = i.index_id
 ORDER BY keyno,
 colid
 FOR XML PATH('') ) AS cols,
 
 (SELECT CASE keyno
 WHEN 0 THEN colid
 ELSE NULL
 END AS [data()]
 FROM sys.sysindexkeys AS k
 WHERE k.id = i.object_id
 AND k.indid = i.index_id
 ORDER BY colid
 FOR XML PATH('') ) AS inc
 FROM sys.indexes AS i )
SELECT DB_NAME() AS 'DBName',
 OBJECT_SCHEMA_NAME(c1.id) + '.' + OBJECT_NAME(c1.id) AS 'TableName',
c1.name + CASE c1.indid WHEN 1 THEN ' (clustered index)' ELSE ' (nonclustered index)' END AS 'IndexName', c2.name + CASE c2.indid
 WHEN 1 THEN ' (clustered index)'
 ELSE ' (nonclustered index)'
 END AS 'ExactDuplicatedIndexName'
FROM indexcols AS c1
INNER JOIN indexcols AS c2 ON c1.id = c2.id
AND c1.indid < c2.indid
AND c1.cols = c2.cols
AND c1.inc = c2.inc;

Script 2: Execute em todos os bancos de dados.

DECLARE @command varchar(4000) 
SELECT @command = 'USE ? 
;
 
WITH indexcols AS
 (SELECT object_id AS id,
 index_id AS indid,
 name,
 
 (SELECT CASE keyno
 WHEN 0 THEN NULL
 ELSE colid
 END AS [data()]
 FROM sys.sysindexkeys AS k
 WHERE k.id = i.object_id
 AND k.indid = i.index_id
 ORDER BY keyno,
 colid
 FOR XML PATH('''') ) AS cols,
 
 (SELECT CASE keyno
 WHEN 0 THEN colid
 ELSE NULL
 END AS [data()]
 FROM sys.sysindexkeys AS k
 WHERE k.id = i.object_id
 AND k.indid = i.index_id
 ORDER BY colid
 FOR XML PATH('''') ) AS inc
 FROM sys.indexes AS i )
SELECT DB_NAME() AS ''DBName'',
 OBJECT_SCHEMA_NAME(c1.id) + ''.'' + OBJECT_NAME(c1.id) AS ''TableName'',
c1.name + CASE c1.indid WHEN 1 THEN '' (clustered index)'' ELSE '' (nonclustered index)'' END AS ''IndexName'', c2.name + CASE c2.indid
 WHEN 1 THEN '' (clustered index)''
 ELSE '' (nonclustered index)''
 END AS ''ExactDuplicatedIndexName''
FROM indexcols AS c1
INNER JOIN indexcols AS c2 ON c1.id = c2.id
AND c1.indid < c2.indid
AND c1.cols = c2.cols
AND c1.inc = c2.inc;
'
EXEC sp_MSforeachdb @command

Lembrando que antes de você sair correndo apagando os índices eu recomendo dar uma olhada se o SQL Server não está mais utilizando-o. Mas Wesley, como eu faço isso?

Simples, basta acessar esse link de outro artigo que eu escrevi que é “TOP 10 Scripts de índices que todos DBAs precisam saber – SQL Server

Lá você encontrará um parágrafo dizendo índice não utilizado com um script abaixo. Pronto, você agora sabe quais são os índices que não são mais utilizados no banco de dados e duplicados. Só falta excluir e mandar o relatório para seu cliente de antes/depois para deixá-lo bem feliz!

Grande abraço!

Índices duplicados nas tabelas do SQL Server.
The following two tabs change content below.

Wesley Mota

DBA SQL Server
Profissional graduado em Banco de Dados e Sistemas de Informação com mais de 7 anos de experiência em empresas de software. Certificado MCSA Microsoft SQL Server possui intensa vivência em administração de banco de dados, Tunning, Performance SQL Server, levantamento de melhorias e monitoramento de banco de dados e servidores SQL Server. Consultoria SQL Server em diversos clientes no Brasil e ao redor do mundo. Escritor no blog dbasqlserverbr.com.br/blog. Onde compartilha conhecimento, experiências e dicas de performance para DBAs SQL Server. Conhecimentos em Oracle e ambientes de alta disponibilidade. Desenvolvimento de softwares web e mobile.Gerenciamento de equipe e projetos.

Latest posts by Wesley Mota (see all)

Wesley Mota

Profissional graduado em Banco de Dados e Sistemas de Informação com mais de 7 anos de experiência em empresas de software. Certificado MCSA Microsoft SQL Server possui intensa vivência em administração de banco de dados, Tunning, Performance SQL Server, levantamento de melhorias e monitoramento de banco de dados e servidores SQL Server. Consultoria SQL Server em diversos clientes no Brasil e ao redor do mundo. Escritor no blog dbasqlserverbr.com.br/blog. Onde compartilha conhecimento, experiências e dicas de performance para DBAs SQL Server. Conhecimentos em Oracle e ambientes de alta disponibilidade. Desenvolvimento de softwares web e mobile.Gerenciamento de equipe e projetos.

Share
Published by
Wesley Mota

Recent Posts

Best Free Spins No Deposit

Casinos online offer free spins to draw new customers. These bonuses are usually very profitable,…

43 minutos ago

Ideal Online Port Gambling Enterprises: An Overview to Locating the Perfect Pc Gaming Experience

In recent times, online casino sites have actually obtained enormous appeal among gamers, providing a…

1 hora ago

Best Online Casinos That Accept Bitcoin Down Payments

Bitcoin, the most preferred cryptocurrency worldwide, has reinvented lots of industries, including the on baixar…

1 hora ago

The Ultimate Guide to Online Slot Reviews

Online slots have turned into one of one of the most preferred forms of home…

1 hora ago

Online Slot Reviews: What is it important? Online reviews of slot machines are very important.…

1 hora ago

Discover the Enjoyment of Free Port Gamings Offline

Port video games have actually long been a popular type of entertainment, providing exhilarating gameplay…

3 semanas ago