Genelde geliştirme çok az veri ile yapıldığı için geliştirme fazında performans sorunu yaşanmaz.
Performans sorunları genelde stres testinde veya son kullanıcı sisteminde kurulum yapıldıktan sonra ortayı çıkar.
Alttaki sp ile hızlı şekilde eksik indeksleriniz bulabileceksiniz. Indeks yaratırken gerçekten o indekse ihtiyaç var mı ?
Sorusunu da cevaplamaya çalışın. Küçük tablolara "Table Scan" yapılması daha performanslı olabiliyor !
Indekslerin IDX1_ ile başlamasını sağladım, bu şekilde sonradan yaratılan indekslerin listesini hemen bulabileceksiniz.
Mutlaka indeks olmadan ve indekslerin yaratılmasından sonra performans karşılaştırması yapınız.
Kolay gelsin,
create proc us_create_fk_index
as
DECLARE @sqlStmt varchar(max)
SELECT @sqlStmt = IsNull(@sqlStmt + ';' + char(13) , '')
+ 'CREATE INDEX [IDX1_'
+ tablename + '_' + columnname +'] ON [dbo].['
+ tablename + '] ( [' + columnname + '] ASC)'
FROM
(
SELECT
o.name AS tablename, c.name AS columnName FROM sys.foreign_key_columns fc
inner join sys.objects o on fc.parent_object_id = o.object_id
inner join sys.columns c on c.object_id = o.object_id
and fc.parent_column_id = c.column_id
EXCEPT
SELECT o.name, c.name FROM sys.index_columns ic
inner join sys.objects o on ic.object_Id = o.object_id
inner join sys.columns c on c.object_id = o.object_id
and ic.column_id = c.column_id
) T
ORDER BY
tableName, columnName
SELECT @sqlStmt
--THE END
Bu sp'yi çalıştırdıktan sonra sonucun son satırına dikkat ediniz. Eğer çok fazla eksik indeksleriniz var ise
son satır yarım gelebilir. Indeksleri yarattıktan sonra sp'yi tekrar çalıştırınız.