MySQL Veritabanı Optimizasyonu: İndeksleme ve Sorgu Hızlandırma
Milyonlarca verisi olan veritabanlarında sorgu süresini düşüren indeksleme ve mimari taktikler.
Yavaşlayan Veritabanları Sitenizi Kilitler
Web projelerinde veritabanı tablonuzda binlerce veya milyonlarca satır biriktikçe SELECT sorguları yavaşlamaya başlar. Doğru mimari kurulmamış ve indeksleme yapılmamış bir MySQL veritabanı, sunucu işlemcisini (CPU) %100 yük altına sokarak sitenin kilitlenmesine ve çökmesine neden olur. Yüksek trafikli ve hızlı çalışan bir web yazılımının arkasında mutlaka optimize edilmiş bir veritabanı katmanı yer almalıdır.
MySQL İndeks (INDEX) Mantığı ve Doğru Kullanımı
Veritabanında indeks kullanmak, kalın bir kitabın en arkasındaki fihrist bölümüne benzer. İndeks olmadığında MySQL aradığı veriyi bulmak için tablodaki tüm satırları baştan sona tek tek tarar (Full Table Scan). İndeks eklendiğinde ise veri doğrudan nokta atışı bulunur.
Hangi Sütunlara İndeks Eklenmelidir?
- WHERE Cümlelerinde Sık Kullanılan Sütunlar: Örneğin makaleleri durumuna göre süzen sorgular için status sütununa indeks eklenmelidir.
- JOIN İşlemlerinde Kullanılan Yabancı Anahtarlar: İki tabloyu bağlayan category_id, user_id gibi alanlar mutlaka indekslenmelidir.
- ORDER BY ve GROUP BY Sütunları: Sıralama yapılan created_at veya views sütunları indekslendiğinde sıralama işlemi hafızada anında gerçekleşir.
- Benzersiz Alanlar (Unique Index): slug, email gibi eşsiz olması gereken sütunlara UNIQUE INDEX tanımlanmalıdır.
EXPLAIN Komutu İle Sorgu Analizi Yapma
Yavaş çalışan sorguları tespit etmek için SQL cümlenizin başına EXPLAIN ekleyerek çalıştırın. Çıkan sonuçta type sütunu ALL görünüyorsa, o sorgunun tüm tabloyu taradığı ve acilen indekse ihtiyaç duyduğu anlamına gelir. type değerinin ref veya eq_ref olması ideal durumdur.
Sorgu Hızlandırma İçin Altın Kurallar
1. SELECT * Kullanımından Kaçının
İhtiyacınız olmayan sütunları çekmek bellek tüketimini artırır. Tüm tabloyu çekmek yerine sadece ihtiyacınız olan alanları belirtin: SELECT id, title, slug FROM posts.
2. Wildcard (%) Aramalarını Başta Kullanmayın
SQL içinde arama yaparken yüzde işaretini kelimenin başında kullanmak indeksi geçersiz kılar ve tüm tabloyu taratır. Mümkünse aramayı doğrudan terim ile başlatın veya Full-Text Search indekslerini kullanın.
3. InnoDB Depolama Motorunu Tercih Edin
Eski MyISAM motoru yerine satır bazlı kilitleme ve ACID uyumluluğu sunan InnoDB depolama motorunu kullanın. Bu sayede bir satır güncellenirken tüm tablo kilitlenmez.
InnoDB Buffer Pool Size Ayarı
Sunucu tarafındaki my.cnf dosyasında innodb_buffer_pool_size değerini sunucu RAM boyutunun %60-70'i kadar tahsis etmek, sık kullanılan verilerin doğrudan bellekten (RAM) okunmasını sağlar ve disk okuma yükünü sıfırlara indirir.
Veritabanı mimarinizi optimize etmek, sorgu sürelerinizi milisaniyelere düşürmek ve yüksek performanslı yazılımlar geliştirmek için Kod Uzmanı Yazılım Ekibi ile iletişime geçebilirsiniz.
Web projenizi birlikte değerlendirelim
Hız, güvenlik ve dönüşüm hedeflerinize uygun yalın bir yol haritası çıkaralım.
Projenizi Konuşalım →Ahmet Yılmaz — Kod Uzmanı
Web geliştirme, PHP, performans optimizasyonu ve mobil uygulama geliştirme alanlarında çalışan yazılım geliştirici.
Yazar ve editoryal yaklaşım →
💬 Yorumlar 0
Düşüncelerinizi Paylaşın
Bu rehber için henüz onaylanmış yorum yok.