MySQL İndeks Kullanımı – Veritabanı Performansını Artırma Rehberi
Bu Rehberde Ne Öğreneceksiniz?
- MySQL indekslerinin çalışma mantığı
- EXPLAIN ile sorgu performansı analiz etme
- Tek sütunlu indekslerle SELECT sorgularını hızlandırma
- UNIQUE indeks ile veri bütünlüğü sağlama
- Çok sütunlu indekslerde sütun sırasının etkisi
- Mevcut indeksleri listeleme ve silme
Aşama 1 – İçerik Analizi (Teknik Özet)
Bu rehber, MySQL veritabanlarında index (dizin) kullanımını ve yönetimini ele alır.
Amaç, büyük veri setlerinde sorgu performansını artırmak ve veri tekrarlarını önlemektir.
İzlenen adımlar; örnek veritabanı kurulumu, EXPLAIN ile sorgu planı analizi, tek sütunlu, UNIQUE ve çok sütunlu indekslerin uygulanmasıdır.
1. Hazırlık: Örnek Veritabanı ve Senaryo
Testler için basit bir çalışan veritabanı oluşturulur.
Aşağıdaki komut yeni bir veritabanı oluşturur ve aktif hale getirir:
CREATE DATABASE rabisu_index;
USE rabisu_index;
- Bu komut çalışan bilgilerini saklayan tabloyu oluşturur:
CREATE TABLE employees (
employee_id int,
first_name varchar(50),
last_name varchar(50),
device_serial varchar(15),
salary int
);
2. Tek Sütunlu İndeksler ve EXPLAIN Analizi
- Bir sorgunun MySQL tarafından nasıl çalıştırıldığını görmek için EXPLAIN kullanılır.
- Bu komut sorgunun yürütme planını analiz eder:
EXPLAIN SELECT * FROM employees WHERE salary = 100000;
Eğer key alanı NULL ise, MySQL tüm tabloyu tarıyor demektir.
- Performansı artırmak için maaş sütununa indeks eklenir:
CREATE INDEX salary_idx ON employees(salary);
- Bu işlemden sonra aynı sorgu çok daha az satır tarar.
3. Benzersiz (UNIQUE) İndeks ile Veri Güvenliği
- Bazı alanlarda tekrar eden değerler istenmez.
- Cihaz seri numarası bunun tipik bir örneğidir.
Aşağıdaki komut benzersiz indeks oluşturur:
CREATE UNIQUE INDEX serial_idx ON employees(device_serial);
- Bu noktadan sonra aynı seri numarasıyla kayıt eklenirse MySQL hata verir.
- Bu sayede veri bütünlüğü korunur.
4. Çok Sütunlu İndeksler (Multi-Column Indexes)
- Birden fazla koşul içeren sorgular için çok sütunlu indeksler kullanılır.
- Bu komut soyad ve ad sütunlarını kapsayan bir indeks oluşturur:
CREATE INDEX name_full_idx ON employees(last_name, first_name);
Önemli: MySQL bu indeksi soldan sağa kullanır.
- last_name ile arama yapılırsa indeks çalışır.
- Sadece first_name ile arama yapılırsa indeks kullanılmaz.
5. Mevcut İndeksleri Yönetme
- Tablodaki tüm indeksleri listelemek için:
SHOW INDEXES FROM employees;
- Artık kullanılmayan bir indeksi silmek için:
DROP INDEX serial_idx ON employees;
- Bu işlem yalnızca indeksi kaldırır, tabloyu etkilemez.
Sıkça Sorulan Sorular (SSS)
1. Her sütuna indeks eklemek doğru mu? Hayır. İndeksler okuma hızını artırır, yazma işlemlerini yavaşlatabilir.
2. İndeksler disk alanı kullanır mı? Evet. İndeksler tablo dışında ek veri yapılarıdır.
3. MySQL hangi durumda indeks kullanmaz? Sorgu tablonun büyük bir kısmını döndürüyorsa tablo taraması tercih edilebilir.
4. Bir tabloda kaç indeks olmalı? Genelde 5–10 arası indeks yeterlidir. Fazlası performansı düşürebilir.
Sonuç
MySQL indeksleri, sorgu performansını doğrudan etkileyen kritik yapılardır. Doğru sütunlar, doğru indeks türü ve doğru sıralama ile ciddi hız kazanımı sağlanır. İndeksleme stratejisi, okuma ve yazma performansı dengelenerek planlanmalıdır.
Bu yaklaşımı, yüksek performans gerektiren projelerde Rabisu Bulut altyapısı üzerinde uygulayarak ölçeklenebilir sistemler kurabilirsiniz.