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.Index_have_table

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]

indexes_find_index_by_name

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]

index_find_by_object_id

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.

 

Mesut Güneş

Selçuk Üniversitesi Bilgisayar programcılığı bölümünden mezun olduktan sonra birçok firmada Yazılım, İş zekası ve Veritabanı Uzmanı olarak çalıştım. Şuan Türkiye’nin en büyük şirketlerinden biri olan Doğan Online’da Veritabanı Yöneticisi olarak çalışıyorum.

You may also like...

1 Response

  1. Bunemi dedi ki:

    Emeğinize sağlık çok teşekkür ederim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.