Tüm Sayfalar / 72 - Database Optimizasyonu
72 / 161
Veritabani

Database Optimizasyonu

Veritabani performansini maksimize etme

Biz Ne Yaptik?

Veritabanini optimize ettik. 87 tabloda toplam 24 yeni index olusturduk. Sik kullanilan sorgular artik cok daha hizli.

Yavass sorgulari tespit edip yeniden yazdik. N+1 problemlerini cozduk. Eager loading ekledik.

Sonuc: Ortalama sorgu suresi 45ms'den 8ms'ye dustu. 5 kat hizlandi.

24
Yeni Index
87
Optimize Tablo
5x
Daha Hizli

Arkada Ne Oluyor?

Index Nedir?

Kitabin sonundaki indeks gibi. "Ahmet" kelimesini bulmak icin tum kitabi okumak yerine indekse bakip direkt sayfaya gidiyorsun.

Index Olmadan
Full Scan
Tum tabloyu tara
Index ile
Index Seek
Direkt bul

Olusturulan Indexler

songs.artist_id
songs.album_id
playlists.user_id
play_logs.created_at
users.email (unique)
favorites.composite

N+1 Problemi Cozumu

YANLIS (N+1)
foreach(playlist as song) song.artist
100 sarki = 101 sorgu!
DOGRU (Eager Loading)
Playlist::with('songs.artist')->get()
100 sarki = 3 sorgu!

Admin Panelden Ne Görebilirsiniz?

Yavas Sorgu Logu

Dashboard > Veritabani > Slow Queries

Sorgu Istatistikleri

Dashboard > Veritabani > Stats

Tablo Boyutlari

Dashboard > Veritabani > Tables

Index Analizi

Dashboard > Veritabani > Indexes

Arkaplanda Neler Çalışıyor?

Veritabanı sorgusu geldiğinde MySQL query optimizer devreye girer. Index kullanımı, tablo tarama yöntemi ve join stratejileri belirlenir.

Sorgu Parsing

MySQL SELECT * FROM songs WHERE artist_id = 5 sorgusunu parse eder, AST (Abstract Syntax Tree) oluşturur.

Index Seçimi

Query Optimizer mevcut index'leri kontrol eder. idx_artist_id varsa onu kullanmaya karar verir.

B-Tree Traversal

Index bir B-Tree yapısıdır. O(log n) karmaşıklıkla aranır, full scan'e göre çok hızlı.

Row Fetch

Index'ten bulunan row_id'ler ile asıl tablo verisi clustered index'ten çekilir.

Eager Loading

Laravel with('artist') ile ikinci sorgu hazırlar: SELECT * FROM artists WHERE id IN (1,2,3)

Hydration

Eloquent sonuçları Collection'a dönüştürür. İlişkiler setRelation() ile modellere bağlanır.

Bu Sayfanın Anahtar Terimleri

Index

Veritabanı için hızlı arama yapısı. Sorgu performansını artırır.

N+1 Problem

Her satır için ayrı sorgu atma hatası. Eager loading ile çözülür.

Eager Loading

İlişkili verileri tek sorguda getirme. N+1 çözümü.

EXPLAIN

Sorgunun nasıl çalıştığını gösteren MySQL komutu.

Veritabani Tablolari
songs 142,847 satir
id artist_id album_id title
users 28,492 satir
id email name
playlists 8,241 satir
id user_id name
PK
Index
Normal
Sorgu Suresi Karsilastirmasi
Full Table Scan 245ms
Index Seek 8ms
30x Hizli
87
Tablo
24
Index
8ms
Ort. Sure