Insert,Update,Delete işlemlerinde tablonun üzerinde bulunan her index’in update görme ihtimali vardır. Dolayısıyla tablo üzerinde ne kadar çok index var ise DML işlemlerinin performansı o kadar düşecektir.

Bugün sizler ile paylaşacağım script ile kolon sayısından daha fazla index’e sahip tabloları listeleyeceğiz.

Script’imiz şu şekilde

create table #tmp1 (DBName sysName, SchemaName sysName, ObjectName sysName, IndexCount int, ColumnCount int)

exec sp_msforeachdb 'use ?;
insert #tmp1
select ''?'' as DBName, SchemaName, ObjectName, IndexCount, count(*) as ColumnCount
from (
	select object_schema_name(object_id) as SchemaName
		,object_name(object_id) as ObjectName
		,count(*) as IndexCount		
		,object_id
	from sys.indexes i
	where ObjectProperty(object_id,''IsUserTable'')=1 and index_id>0 
	group by object_id
)xx	
join sys.columns c on c.object_id=xx.object_id
group by SchemaName, ObjectName, IndexCount
having IndexCount>count(*)
'

select * from #tmp1

drop table #tmp1

 

Örnek bir çıktı aşağıdaki gibi olacaktır.

image

Örneğin ilk tabloda 2 kolon varken bu tablo 3 adet index’e sahip.

Yukarıdaki script’in sizin ortamlarınızda kaç sonuç döndürdüğünü merak ediyorum. Bu script’i kendi ortamınızda çalıştırıp çıkan sonucu yorum olarak paylaşır mısınız?