Veritabanı Performansını Optimize Etmek: Index Seçimi

İsmet Kizgin
3 min readMar 5, 2024

--

Gelişen teknoloji dünyasında, veritabanları artık yazılım projelerinin temel yapı taşlarından biri haline gelmiştir. Özellikle büyük miktarda veri ile çalışan uygulamaların performansını artırmak için, veritabanlarının etkin bir şekilde yapılandırılması ve yönetilmesi büyük önem taşır. Bu bağlamda, veritabanı indexlemesi büyük bir rol oynar.

Bu yazıda, PostgreSQL hakkında bilgiler ve örnekler paylaşacağım. Verdiğim örnekler ve yöntemler, diğer ilişkisel veritabanları için de aynı mantık çerçevesi içinde kullanılabilir. Ancak, bazı index isimlerinde farklılıklar olabilir veya alternatif index tipleri farklı veritabanı sistemlerinde bulunabilir.

Indexleme Nedir?

Veritabanı indexlemesi, veritabanı yönetim sistemlerinde (RDBMS) veri erişimini hızlandırmak için kullanılan bir tekniktir. Indexler, belirli bir sütunu veya sütun kombinasyonunu sıralamak veya aramak için bir veri yapısı oluşturur. Bu yapılar, genellikle ağaç yapısına benzer ve belli bir sıraya göre verileri depolarlar. Bir sorgu çalıştırıldığında, veritabanı indexi kullanılarak verilere daha hızlı erişilir. Özellikle büyük veritabanlarında, indexler sorgu performansını artırarak cevap sürelerini iyileştirir.

Tabi ki, bu konunun bir dezavantajı bulunmakta. Bir tablo içerisinde çok fazla index olması INSERT, UPDATEve DELETE işlemlerinde performans anlamında gerileme sağlayabilir. Kısacası, select sorgusu iyiye giderken insert sorgusu yavaşlayabilir. INSERT, UPDATEve DELETE işlemlerinin yoğun olarak bulunduğu tablolarda, indexlemenin bu durumu göze alarak yapılması tavsiye edilir.

SQL sorgusunu analiz etmeyi bilmiyorsanız, index tiplerine geçmeden önce bu konuda biraz bilgi edinmek isteyebilirsiniz. “SQL Sorgu Analizi: Veritabanı Performansını Artırma” yazımı okuyarak konu hakkında bilgi edinebilirsiniz.

Index Tipleri

Farklı tipteki indexlemelerin en büyük nedeni farklı sorgulamalarda gösterdiği performanslardır. Index seçerken kullandığımız/kullanacağımız sorguları analiz edebilir, böylece index türümüzü daha doğru seçip, veritabanımızın sorgu performansını artırabiliriz.

B-Tree Index

B-Tree indeksi, veritabanlarında sıkça kullanılan bir veri yapısıdır. Bu indeks, veri tabanlarında sıklıkla arama işlemlerini hızlandırmak için kullanılır. B-Tree yapısı, her düğümde birden fazla anahtar ve onların karşılık gelen değerlerini saklar. Bu anahtarlar, sıralı bir şekilde düzenlenir ve düğümler arasında dengeli bir şekilde dağıtılır. Bu yapının dengeli olması, arama işlemlerini hızlandırır ve performansı artırır.

B-Tree indeksi, > < = IN BETWEEN IS NULL ve IS NOT NULL gibi çeşitli sorgu türleri için etkin bir şekilde çalışır.

Hash Index

Hash indeksi, bir hash fonksiyonu kullanarak indekslenen değerleri bir anahtar-değer çifti olarak saklar. Bu sayede, verinin konumu doğrudan hash değeriyle belirlenir, bu da hızlı arama işlemlerini sağlar. Hash indeksi, eşitlik aramaları (örneğin, WHERE column = ‘value’) için etkilidir, ancak aralık aramaları veya sıralama gerektiren işlemler için uygun değildir. Bu indeks, veriye hızlı erişim sağlamak için kullanılır.

BRIN: Block Range Index

BRIN, büyük hacimli veritabanlarında performansı artırmak için kullanılan bir indeks türüdür. BRIN, veriyi bloklara böler ve her blok için minimum ve maksimum değerleri saklar. Bu sayede, veriyi fiziksel olarak sıralamak veya tam olarak indekslemek yerine, veriyi bloklara böler ve her blok için bir aralık bilgisini saklar. Bu yaklaşım, özellikle büyük hacimli veriler üzerinde sorgulama yapılırken performans avantajı sağlar ve indeks boyutunu minimum düzeyde tutarak depolama alanından tasarruf eder.

Örneğin, bir kullanıcı tablosundaki X ve Y tarihleri arasında kaydedilen kullanıcıları almak istediğinizde, BRIN indeksi diğer indeks türlerine göre daha etkin ve performanslı çalışır.

GIN Index

GIN (Generalized Inverted Index) indeksi, PostgreSQL gibi veritabanı sistemlerinde kullanılan bir indeks türüdür. Bu indeks, JSON, hstore ve tam metin arama (like ilike) gibi çoklu değerler içeren veri tiplerini hızlı bir şekilde işlemek için tasarlanmıştır. GIN indeksi, veri içeriğine dayalı arama ve filtreleme işlemlerinde performansı artırır.

GIST Index

GIST (Generalized Search Tree) indeksi, PostgreSQL gibi ilişkisel veritabanı yönetim sistemlerinde kullanılan bir indeks türüdür. GIST, özellikle geometrik ve diğer karmaşık veri tiplerini indekslemek için tasarlanmıştır. Bu indeks, çok boyutlu verileri ve karmaşık sorguları destekleyerek veri tabanı performansını artırır. GIST indeksi, R-Tree, GiST ve diğer özel arama ağaçlarını kullanarak verileri indeksler. Bu sayede, özellikle coğrafi veriler gibi çok boyutlu verilerin arama ve sorgulama işlemleri hızlı ve etkin bir şekilde gerçekleştirilebilir.

Sonuç

Her bir indeks türünün özellikleri ve kullanım alanları ele alınarak, veritabanı performansını artırmak için uygun stratejiler bulunmaktadır.

Yazımı okuduğunuz için teşekkür ederim, umarım sizin için yararlı olmuştur 🙂

İyi Çalışmalar…

Yararlı Olabilecek Kaynaklar

--

--