Archive

Archive for October, 2012

Encontrando Índices Duplicados no SQL Server

Galera, boa noite.

Geralmente nós profissionais do mercado SQL Server sempre estamos procurando, desenvolvendo e criando maneiras de automatizar o trabalho do dia-a-dia. Com isso, podemos usar o nosso precioso tempo para poder desenvolver técnicas e recursos para agir com mais pró-atividade. E isso não seria diferente com os “scripts” que carregamos. A partir de hoje colocarei  nesta seção de scripts, alguns scripts que criei, outros que peguei na internet ou copiei de livros.  Não vou conseguir lembrar o nome de todos os autores do scripts, mas, geralmente serão os nomes dos profissionais mais conhecidos e ativos na comunidade (Se o autor ver seu script aqui, por favor, me mande um e-mail para que eu faça a referência). Até hoje uso os scripts que foram utilizados nas seções “30 Scripts que não podem faltar no pen driver de um DBA (parte 1/2). Que foi apresentada pelo Vitor Fava, Alexandre Lopes e Rodrigo. Simplesmente incrível.

Vamos ao que interessa! O script abaixo foi criado pelo Paul Nielsen para poder encontrar índices duplicados em um banco de dados SQL Sever. O script avalia apenas as chaves dos índices e não as colunas que foram adicionados ao Cover Index e ao Filtered Index:

/*
SELECIONAR INDICES DUPLICADOS ( KEYS INDEX ONLY )

http://sqlblog.com/blogs/paul_nielsen/archive/2008/06/25/find-duplicate-indexes.aspx

*/
— exact duplicates
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
object_schema_name(c1.id) + ‘.’ + object_name(c1.id) as ‘table’
, c1.name as ‘index’
, c2.name as ‘exactduplicate’
from indexcols as c1
join indexcols as c2
on c1.id = c2.id
and c1.indid < c2.indid
and c1.cols = c2.cols
and c1.inc = c2.inc;

 

Obrigado Alisson Cardoso

Advertisements