SQL’de indexler (indeksler), veritabanı tablolarındaki verilere daha hızlı erişmek için kullanılan veri yapılarıdır. Sorgu performansını artırır ancak yazma işlemlerini (INSERT, UPDATE, DELETE) biraz yavaşlatabilir, çünkü indekslerin güncellenmesi gerekir.
SQL’de Kullanılan Başlıca İndeks Türleri
- Clustered Index (Kümeleme İndeksi)
- Bir tablonun fiziksel veri sırasını indeks sırasına göre düzenler.
- Her tabloda yalnızca bir tane clustered index olabilir.
- Veriler doğrudan bu indeksle düzenlendiği için sorgu performansı yüksektir.
- Birincil anahtarlar (PRIMARY KEY) varsayılan olarak clustered index olur.
CREATE CLUSTERED INDEX IX_TableName_ColumnName ON TableName (ColumnName);
Non-Clustered Index (Kümelenmemiş İndeks)
- Verileri fiziksel sıraya göre düzenlemez, ancak indeks sırasına göre mantıksal bir yapı oluşturur.
- Clustered index’in aksine, bir tabloda birden fazla non-clustered index olabilir.
- Genellikle SELECT sorgularında filtreleme ve sıralama performansını artırmak için kullanılır.
CREATE NONCLUSTERED INDEX IX_TableName_ColumnName ON TableName (ColumnName);
Unique Index (Benzersiz İndeks)
- Benzersiz değerler içeren bir indeks türüdür.
- Hem clustered hem de non-clustered olabilir.
- UNIQUE constraint ile benzer şekilde çalışır, aynı sütunlarda tekrarlı değerlerin oluşmasını engeller.
CREATE UNIQUE INDEX IX_TableName_ColumnName ON TableName (ColumnName);
Composite Index (Bileşik İndeks)
- Birden fazla sütun üzerinde oluşturulan bir indekstir.
- Özellikle, sorgularınız birden fazla sütunla çalışıyorsa faydalıdır.
CREATE NONCLUSTERED INDEX IX_TableName_Columns ON TableName (Column1, Column2);
Full-Text Index (Tam Metin İndeksi)
- Büyük metin alanlarında (VARCHAR, TEXT, NVARCHAR) arama yapmak için kullanılır.
- Standart LIKE sorgularına göre çok daha hızlıdır.
- Genellikle metin tabanlı verilerde belirli bir kelime veya ifade ararken kullanılır.
CREATE FULLTEXT INDEX ON TableName(ColumnName) KEY INDEX PK_TableName;
İndeks Seçerken Dikkat Edilmesi Gerekenler
- Sorgu Performansı:
- İndeks, SELECT, JOIN ve WHERE sorgularını hızlandırabilir.
- Yazma Maliyeti:
- INSERT, UPDATE ve DELETE işlemleri sırasında indekslerin güncellenmesi gerektiği için bu işlemleri yavaşlatabilir.
- Disk Kullanımı:
- Fazla sayıda indeks oluşturmak, disk alanı tüketimini artırır.
- Uygun Sütun Seçimi:
- Sıkça sorgulanan sütunlar üzerinde indeks oluşturulmalıdır.
SQL Server’da İndeks Görüntüleme
Tablodaki mevcut indeksleri listelemek için aşağıdaki sorgular kullanılabilir:
-- Mevcut indeksleri listeleme SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID('TableName');
Bu bilgilerle indekslerinizi optimize ederek veritabanınızın performansını artırabilirsiniz. 😊
https://medium.com/trendyol-tech/sql-server-index-yap%C4%B1s%C4%B1-aba652828fe2
https://learn.microsoft.com/en-us/sql/relational-databases/indexes/indexes?view=sql-server-ver16