Yazının İngilizcesi için lütfen tıklayınız.

Bazen büyük bir insert ya da update sorgusu çalıştırmadan önce ya da sistem istatistiklerine bakarak artık ihtiyaç olmadığına karar verdiğimizde bir index’i pasife çekmek isteriz. Bir index’i pasife çekmek için DISABLE anahtar kelimesi kullanırız.

——————————————————————————
USE EpicZoneDatabase
GO

ALTER INDEX [IX_Production_CategoryId] ON [dbo.Production] DISABLE
GO
——————————————————————————

Geçen hafta yaptığımız bir danışmanlık çalışması sırasında bir geliştirici, aynı index’i aktifleştirmek için ENABLE anahtar kelimesinin neden hata verdiğini ve bunun yerine ne kullanmak gerektiğini sordu.

Çünkü Microsoft SQL Server üzerinde bir index tek başına aktifleştirilemez; o index’i rebuild etmemiz gerekir. Aşağıda sorgu, ilgili index’i rebuild ederek yeniden aktifleştirecektir.

——————————————————————————
USE EpicZoneDatabase
GO

ALTER INDEX [IX_Production_CategoryId] ON [dbo.Production] 
REBUILD WITH (ONLINE = ON);
GO
——————————————————————————

Önemli bir ek not olarak eklemek isteriz ki, eğer sisteminiz için aktif saatlerde bu işlemi yapıyorsanız, index’i rebuild ederken ONLINE opsiyonunu eklemek iyi olacaktır. ONLINE opsiyonu, diğer kullanıcıların veriyi güncellemesine ve erişmesine izin verir. Eğer rebuild işlemini (daha az disk yeri kaplayarak ve işlemin daha hızlı tamamlanması için) offline yapmayı tercih ederseniz, tablodaki veriye ve ilgili index’e özel kilit koyulur. Bu durum, index işlemi tamamlanana kadar ilgili veride güncelleme yapılmasını (update) ve verinin elde edilmesinin (select) önüne geçer; nihayetinde de SQL Server üzerinde deadlock’lar ile karşılaşabiliriz.