Ana içeriğe geç
Kesit SQL
İleri · T-SQL (SQL Server)

SQL Server indeksleri: clustered, nonclustered, INCLUDE, filtreli

Doğru indeks tasarımı ve yürütme planının okunması.

Uygulamada aç, 5 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Clustered ve nonclustered

ClusteredNonclustered
Tabloda kaç tane?En fazla 1Çok sayıda (999'a kadar)
Ne saklar?Verinin kendisi bu sıraya göre dizilirAnahtar + satıra işaretçi (clustered anahtar)
VarsayılanPRIMARY KEY ile otomatikCREATE INDEX ile

Clustered indeksi olmayan tabloya heap denir. İyi bir clustered anahtar dar, benzersiz, sürekli artan ve değişmeyen olmalıdır (ör. IDENTITY).

Kapsayan (covering) indeks: INCLUDE

Sorgunun ihtiyaç duyduğu tüm sütunlar indekste varsa SQL Server tabloya hiç gitmez (Key Lookup ortadan kalkar):

CREATE NONCLUSTERED INDEX ix_orders_customer
    ON orders (customer_id, order_date)
    INCLUDE (status, channel);

EXEC sp_helpindex 'orders';

Filtreli indeks

Yalnızca bir alt kümeyi indeksler: daha küçük, daha hızlı. Örneğin sadece iptal edilmiş siparişleri sık sorguluyorsan:

CREATE NONCLUSTERED INDEX ix_orders_iptal
    ON orders (order_date)
    WHERE status = 'cancelled';

SELECT COUNT(*) FROM orders WHERE status = 'cancelled' AND order_date >= '2024-01-01';

Columnstore

Analitik sorgular için veriyi sütun sütun, sıkıştırılmış saklar: milyonlarca satırlık toplamlarda 10 kat ve üzeri hız. CREATE CLUSTERED COLUMNSTORE INDEX cci_sales ON fact_sales;

Yürütme planında neye bakılır?

BakımZamanla indeksler parçalanır (fragmentation). sys.dm_db_index_physical_stats ile ölçülür; yaygın başlangıç kuralı %5–30 için REORGANIZE, %30 üzeri için ALTER INDEX ... REBUILD, 1000 sayfadan küçük indekse dokunmamaktır; ayrıntı ve bu eşiklerin tartışması Bakım dersinde (dba-bakim). sys.dm_db_missing_index_details eksik indeks önerileri verir (körü körüne uygulama!).
Alıştırmalara geç (5)