Ana içeriğe geç

Veritabanı İndeksi

İngilizcesi
Database Index
Türkçe karşılığı
dizin
Okunuşu
deytıbeys indeks

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/database-index

Kısaca

Veritabanı indeksi, tüm tabloyu taramadan satırları hızla bulmayı sağlayan, bir kitabın sonundaki dizine benzeyen bir veri yapısıdır.

Veritabanı indeksi nedir?

Veritabanı indeksi, veritabanının bir tablonun yanında tuttuğu ve bir ya da daha fazla sütunun değerine göre satırları hızla bulmasını sağlayan ek bir yapıdır. İndeks olmadan, e-postaya göre bir kullanıcı bulmak gibi bir sorgu veritabanını her satırı kontrol etmeye zorlar; buna tam tablo taraması (full table scan) denir ve tablo büyüdükçe yavaşlar.

Çoğu ilişkisel veritabanı indeksleri B-ağaçları (B-tree) olarak saklar; bunlar, milyonlarca satırda bile doğru değere birkaç adımda ulaşmayı sağlayan sıralı ağaç yapılarıdır. Özel durumlar için başka türler de vardır: tam eşleşmeler için hash indeksleri, tam metin araması ve JSON verisi için GIN indeksleri ve embedding'ler üzerinde benzerlik araması için vektör indeksleri gibi.

Bir ders kitabının sonundaki dizin iyi bir benzetmedir: "özyineleme" kelimesini bulmak için her sayfayı okumak yerine alfabetik olarak arar ve doğru sayfaya atlarsınız. Veritabanları birincil anahtarları ve genellikle benzersiz sütunları otomatik olarak indeksler; geliştiriciler ise WHERE, JOIN ve ORDER BY ifadelerinde sık kullanılan sütunlara başka indeksler ekler.

İndeksler bedava değildir. Her biri depolama alanı kaplar ve her INSERT, UPDATE ya da DELETE etkilenen indeksleri de güncellemek zorundadır; bu yüzden çok fazla indeks yazmaları yavaşlatır. Amaç, önemli sorgularınızın gerçekten filtrelediği ya da sıraladığı sütunları indekslemektir; EXPLAIN gibi komutlar bir sorgunun indeks kullanıp kullanmadığını gösterir.

Bir bakışta

users tablosunda ada@ex.io'yu bulmak: indeks olmadan veritabanı her satırı baştan sona kontrol eder; email üzerinde bir indeks varsa anahtarı sıralı anahtarlar arasında arar ve doğrudan 5. satıra atlar.WHERE email = 'ada@ex.io'İndeks olmadanher satırı kontrol ederusersidemail1linus@ex.io2grace@ex.io3mia@ex.io4alan@ex.io5ada@ex.io6ken@ex.ioidx_users_emailemailidada@ex.io5alan@ex.io4grace@ex.io2ken@ex.io6linus@ex.io1mia@ex.io3İndekslesıralı anahtarlar, birkaç adım
Tam tablo taraması tablo büyüdükçe yavaşlar. İndeks anahtarları sıralı tutar; böylece veritabanı anahtarı birkaç adımda bulur ve doğrudan satırına gider.

Önemli noktalar

  • İndeksler, tam tablo taramalarından kaçınarak okumaları hızlandırır.
  • Çoğu indeks, değerleri hızlı arama için sıralı tutan B-ağaçlarıdır.
  • Birincil anahtarlar otomatik olarak indekslenir.
  • Her indeks ek depolama alanı kullanır ve yazmaları biraz yavaşlatır.
  • Bir sorgunun indeks kullanıp kullanmadığını kontrol etmek için EXPLAIN kullanın.

Örnek

İndeks oluşturmak ve kontrol etmeksql
-- Without an index, this query scans every row in the table
SELECT * FROM users WHERE email = 'ada@example.com';

-- Create an index on the email column
CREATE INDEX idx_users_email ON users (email);

-- Ask the database how it runs the query (it should now use the index)
EXPLAIN SELECT * FROM users WHERE email = 'ada@example.com';

-- A composite index helps queries that filter by both columns
CREATE INDEX idx_orders_customer_date ON orders (customer_id, created_at);

Sık sorulan sorular

Neden her sütunu indekslemeyelim?

Her indeks disk alanı kullanır ve her ekleme, güncelleme ve silmede güncellenmesi gerekir; bu yüzden çok fazla indeks yazmaları yavaşlatır. Sık sorgularınızın filtrelediği, birleştirdiği ya da sıraladığı sütunları indeksleyin.

Kümelenmiş (clustered) ve kümelenmemiş (non-clustered) indeks arasındaki fark nedir?

Kümelenmiş indeks, tablo satırlarının fiziksel olarak hangi sırayla saklanacağını belirler; bu yüzden bir tabloda yalnızca bir tane olabilir. Kümelenmemiş indeks ise satırlara işaret eden ayrı bir yapıdır ve bir tabloda birçok tane olabilir.

Bileşik (composite) indeks nedir?

Bileşik indeks, (customer_id, created_at) gibi birden fazla sütunu kapsar. Sütunlar bu sırayla sıralandığı için ilk sütuna ya da birinci ve ikinci sütuna birlikte göre filtreleyen sorgulara yardımcı olur.

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar