Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Yan Yana Banner
Katılım
7 Nis 2025
Konular
367
Mesajlar
780
Çözümler
1
Tepkime puanı
121
Puan
93
Konum
İstanbul
Web sitesi
forumagel.com
Daha önceki bölümlerde, özellikle Sorgu Yürütme Planlarını (Bölüm 8) incelerken indekslerin, veritabanı sorgularının performansını artırmada ne kadar kritik bir rol oynadığından bahsetmiştik. İndeksler, bir kitaptaki fihrist veya dizin gibidir; veritabanı sisteminin aradığı verilere tüm tabloyu taramak yerine doğrudan veya daha hızlı bir yoldan ulaşmasını sağlar. Ancak indekslemenin de farklı türleri ve bu türleri ne zaman ve nasıl kullanacağınıza dair stratejiler bulunur. Doğru indeksleme, uygulamanızın hızını önemli ölçüde artırabilirken, yanlış veya aşırı indeksleme performansı düşürebilir ve depolama alanı israfına yol açabilir.

Başlıca İndeks Türleri

Farklı Veritabanı Yönetim Sistemleri (DBMS) farklı indeks türlerini destekleyebilir, ancak temel kavramlar genellikle benzerdir:

  1. Kümelenmiş İndeks (Clustered Index):
    • Veritabanı tablosundaki verinin fiziksel olarak disk üzerinde hangi sırada saklanacağını belirler.
    • Bir tabloda yalnızca bir adet kümelenmiş indeks olabilir, çünkü veri sadece tek bir fiziksel sırada saklanabilir.
    • Genellikle tablonun PRIMARY KEY'i otomatik olarak kümelenmiş indeks olarak oluşturulur (eğer aksi belirtilmemişse).
    • Veriye hızlı erişim sağlar ve aralık tabanlı sorgularda çok etkilidir.
  2. Kümelenmemiş İndeks (Non-Clustered Index):
    • Verinin fiziksel saklanma sırasını etkilemez.
    • Ayrı bir yapıda (genellikle B-tree ağacı şeklinde) saklanır. Bu yapı, indekslenmiş sütun değerlerini ve bu değerlere karşılık gelen veri satırlarının fiziksel konumlarını veya kümelenmiş indeks anahtarını içerir.
    • Bir tabloda birden fazla kümelenmemiş indeks olabilir.
    • Belirli satırlara hızlı erişim sağlar, ancak verinin tamamını çekmek için ek bir "lookup" (veri satırına gitme) adımı gerekebilir (Eğer kapsayan indeks değilse).
  3. Benzersiz İndeks (Unique Index):
    • İndekslenen sütunlardaki değerlerin benzersiz olmasını sağlar.
    • Hem kümelenmiş hem de kümelenmemiş olabilir.
    • PRIMARY KEY ve UNIQUE kısıtlamaları otomatik olarak benzersiz indeksler oluşturur. Veri bütünlüğünü sağlamanın yanı sıra sorgu performansını da artırır.
  4. Tam Metin İndeks (Full-Text Index):
    • Büyük metin alanlarındaki kelime veya ifadeleri hızlı bir şekilde aramak için kullanılır.
    • Geleneksel SQL LIKE aramalarından çok daha gelişmiş ve performanslı metin arama yetenekleri sunar.
  5. Kapsayan İndeks (Covering Index):
    • Bir kümelenmemiş indekstir ancak SELECT ifadesinde ihtiyaç duyulan tüm sütunları içerir (indeks anahtarı sütunlarına ek olarak "dahil edilen" - included - sütunlar olarak).
    • Bu sayede veritabanı sistemi, sorguyu yanıtlamak için ana tabloya dönmek zorunda kalmaz, sadece indeksi okuması yeterli olur. Bu da performansı önemli ölçüde artırır.
  6. Bileşik/Birleşik İndeks (Composite/Compound Index):
    • Birden fazla sütunu içeren indekstir.
    • Sorguların WHERE, ORDER BY veya GROUP BY yan tümcelerinde birden fazla sütunu birlikte kullandığı durumlarda faydalıdır.
    • Sütunların indeksteki sırası çok önemlidir. Sorgunun sadece bileşik indeksin baştaki sütunlarını kullandığı durumlarda indeks etkin olabilir.
İndeksleme Stratejileri: Hangi Sütunları İndekslemeli?

Doğru sütunları indekslemek, performans artışının anahtarıdır. İndekslemeyi düşünmeniz gereken sütunlar:

  • WHERE Yan Tümcesinde Sık Kullanılan Sütunlar: Sorguların çoğu, veriyi filtrelemek için WHERE kullanır. Filtreleme koşulundaki sütunları indekslemek aramayı hızlandırır.
  • JOIN Koşullarında Kullanılan Sütunlar: Tabloları birleştirirken kullanılan sütunlar (genellikle yabancı anahtarlar - FOREIGN KEY) indekslenirse JOIN işlemleri çok daha hızlı olur. FOREIGN KEY sütunlarına indeks eklemek yaygın ve iyi bir pratiktir.
  • ORDER BY ve GROUP BY Yan Tümcelerinde Kullanılan Sütunlar: Sorgu sonuçlarını sıralamak veya gruplamak maliyetli işlemler olabilir. Bu yan tümcelerde kullanılan sütunları indekslemek, veritabanının sıralama veya gruplama için indeksi kullanmasına olanak tanıyarak performansı artırabilir.
  • SELECT Listesindeki Sütunlar (Kapsayan İndeksler İçin): Eğer bir sorgunun SELECT listesindeki tüm sütunlar bir indekste (anahtar veya dahil edilmiş sütunlar olarak) bulunuyorsa, veritabanı sadece indeksi okuyarak sorguyu yanıtlayabilir (Kapsayan İndeks). Bu, özellikle sık çalıştırılan ve belirli sütunları çeken sorgular için çok etkili olabilir.
  • Yüksek Kardinaliteli Sütunlar (Çok Farklı Değeri Olan Sütunlar): Benzersiz veya çok farklı değer içeren sütunlar (UserID, Email gibi) indeksleme için iyi adaylardır çünkü indeks, aranan değeri hızlıca bulmak için dar bir sonuç kümesi sağlar. Düşük kardinaliteli sütunlar (örneğin, cinsiyet, medeni durum) tek başına indekslendiğinde genellikle çok etkili olmaz.
İndeks Oluşturma Sözdizimi (DBMS'e Göre Değişir):

Kod:
-- Basit bir kümelenmemiş indeks oluşturmaCREATE INDEX idx_tabloadi_sutunadi ON tabloadi (sutunadi);

-- Birden fazla sütunu içeren (bileşik) bir kümelenmemiş indeks oluşturmaCREATE INDEX idx_tabloadi_sutun1_sutun2 ON tabloadi (sutun1, sutun2);

-- Benzersiz bir kümelenmemiş indeks oluşturmaCREATE UNIQUE INDEX idx_tabloadi_benzersizsutun ON tabloadi (benzersizsutun);

-- Kapsayan bir indeks oluşturma (SQL Server örneği)CREATE INDEX idx_tabloadi_sutunA_sutunB_Covered ON tabloadi (sutunA, sutunB) INCLUDE (sutunC, sutunD);
(Kümelenmiş indeks genellikle tablo oluşturulurken PRIMARY KEY veya CREATE CLUSTERED INDEX ile tanımlanır.)

İndeks Bakımı ve Performans

İndeksler zamanla parçalanabilir (fragmentation), bu da performanslarını düşürür. Ayrıca, tabloların içeriği değiştikçe indekslerin dayandığı istatistikler eskir. Daha önce (Bölüm 13) bahsettiğimiz gibi, indeksleri yeniden düzenlemek veya yeniden oluşturmak ve istatistikleri güncellemek, indekslerin etkinliğini korumak için düzenli olarak yapılması gereken bakım görevleridir.

İndeksleme, veritabanı performans optimizasyonunun temel direklerinden biridir. Ancak dengeli bir yaklaşım gerektirir; her sütunu indekslemek genellikle kötü performansa yol açar. Sorgu yürütme planlarını (Bölüm 8) kullanarak indekslerinizin kullanılıp kullanılmadığını ve ne kadar etkili olduğunu anlamak, indeksleme stratejinizi geliştirmenize yardımcı olacaktır.

Bu bölümde indeks türlerini, hangi sütunları indeksleyeceğinize dair stratejileri ve indeks oluşturma temellerini ele aldık.

Veritabanı performansını etkileyen başka faktörler ve daha ileri optimizasyon teknikleri de bulunmaktadır. Bir sonraki bölümde, sorguları daha verimli hale getirmek için kullanabileceğimiz diğer bazı ileri optimizasyon yöntemlerine veya farklı veritabanı modellerini (NoSQL) daha derinlemesine incelemeye devam edebiliriz. Gelişmiş performans ayarları mantıklı bir sonraki adım olabilir.


 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri