SQL Server – Tablolarda Index Tanımlı Olup Olmadığını Sorgulamak
SQL Server’da tablolarda oluşturulan Index‘lerin (Clustered/Non-Clustered) bazı durumlarda T-SQL yardımı ile sorgulanıp var olup olmadıkları bilgisine ihtiyacımız olabilir. Tablolarda oluşturulan index‘lerin nasıl t-sql yardımı ile var olup olmadığına iki farklı yöntem ile gözatalım.
Ben Microsoft‘un örnek veritabanı olan AdventureWorks veritabanında bulunan Production.Product tablosundaki ismini belirtiğim index’lerin var olup olmadığına bakıyor olacağım.
1. Yöntem : Catalog Views yardımı ile index’in tanımlı olup olmadığını sorgulamak
sys.indexes catalog view yardımı ile Clustered ve Non-Clustered index bilgisini sorgulayabiliriz. Ben bu örneğimde Production.Product tablosunda tanımlı olan “PK_Product_ProductID” isimli Clustered index’in t-sql yardımı ile sorgulanmasına bakıyor olacağım.
[sql]
IF EXISTS (
SELECT 1 FROM sys.indexes I
JOIN sys.tables T ON I.object_id=T.object_id
JOIN sys.schemas S ON S.schema_id=T.schema_id
WHERE I.Name=’PK_Product_ProductID’ –İndex Adı
AND T.Name=’Product’ — Tablo Adı
AND S.Name=’Production’ — Şema Adı
)
BEGIN
PRINT ‘Index Mevcut’
END
ELSE
BEGIN
PRINT ‘Index Mevcut Değil’
END
[/sql]
2. Yöntem : sys.indexes Catalog View ile birlikte OBJECT_ID fonksiyonu kullanımı
Bu yöntemde yine Production.Product tablosunda bulunan “PK_Product_ProductID” isimli Clustered Index’in var olup olmadığını sorgulayacağız. Bu sefer sys.indexes view’i ile birlikte OBJECT_ID fonksiyonunu da kullanıyoruz.
[sql]
IF EXISTS (
SELECT 1 FROM sys.indexes
WHERE Name=’PK_Product_ProductID’ –İndex Adı
AND object_id=OBJECT_ID(‘Production.Product’)
)
BEGIN
PRINT ‘Index Mevcut’
END
ELSE
BEGIN
PRINT ‘Index Mevcut Değil’
END
[/sql]
Bazı senaryolarda ihtiyacınız olacak olan bu sorgulama yöntemlerinin faydalı olması dileğiyle. Sizlerinde kullanmış olduğu farklı yöntemler var ise yorum panelinden paylaşabilirsiniz.
Emeğinize sağlık çok teşekkür ederim.