Laravel'de Database Indexing: Performansı %500 Artırma Rehberi ⚡📊
"Uygulamanız yavaş mı çalışıyor? Veritabanı sorgularınız saniyeler mi alıyor?" Laravel'de doğru indexleme stratejileri ile performansı nasıl maksimuma çıkaracağınızı öğrenelim!
1. Index Nedir? Neden Önemli? 🧠
Database index, arama hızını artıran özel veri yapılarıdır:
- Kitap indeksi gibi düşünün 📚
- Sorgu hızını 100x artırabilir 🚀
- Büyük verilerde hayat kurtarır (100k+ kayıt)
// Indexsiz sorgu: 2.4s
$users = User::where('email', $email)->first();
// Indexli sorgu: 0.02s (120 kat hızlı!)
2. Laravel Migration ile Index Oluşturma 🛠️
Basit Index Ekleme
Schema::table('users', function (Blueprint $table) {
$table->index('email'); // Normal index
});
Unique Index (Benzersiz)
$table->unique('username'); // Aynı değerden sadece 1 tane
Composite Index (Bileşik)
$table->index(['last_name', 'first_name']); // Çoklu sütun
3. Hangi Sütunlara Index Koymalı? 🎯
Sütun TipiIndex Gerekli Mi?ÖrnekPrimary Key✅ OtomatikidForeign Key✅ Kesinlikleuser_idSık aranan alanlar✅ Evetemail, usernameSıralama yapılan✅ Gereklicreated_atBoolean değerler❌ Nadirenis_active
4. Advanced Index Teknikleri 🧙♂️
Partial Index (PostgreSQL)
$table->index('email', 'active_users_email_index')
->where('is_active', true);
Full-Text Index (Arama için)
$table->fullText('body'); // Blog içeriklerinde arama
Index Türleri Karşılaştırması
$table->index('column'); // B-tree (Default)
$table->hashIndex('column'); // Hash (Eşitlik sorguları)
$table->spatialIndex('location'); // Coğrafi veriler
5. Index Optimizasyonu için EXPLAIN 🔍
Yavaş sorgularınızı analiz edin:
DB::enableQueryLog();
User::where('email', 'test@example.com')->first();
$query = DB::getQueryLog()[0]['query'];
dd(DB::select("EXPLAIN $query"));
İyi Sonuç: type: ref, possible_keys: email, key: email
6. Sık Yapılan Hatalar ⚠️
- Gereksiz indexler (Performansı düşürür)
- Çok geniş indexler (text/varchar(255) gibi)
- Sık güncellenen sütunlar (Her update indexi de günceller)
- Composite index sırası (Önemli:
['a','b']≠['b','a'])
7. Laravel Scout ile Full-Text Arama 🔎
composer require laravel/scout composer require algolia/algoliasearch-client-php
class Post extends Model
{
use Searchable;
public function toSearchableArray()
{
return [
'title' => $this->title,
'body' => $this->body
];
}
}
Performans Artışı Ölçümleri 📈
SenaryoIndex ÖncesiIndex SonrasıKazanım100k kayıt arama1.8s0.02s90xSıralı listeleme1.2s0.15s8xJOIN sorguları3.4s0.4s8.5x
Turbo Hızlı Veritabanı 🚀
Doğru indexleme ile:
- Sorgular 10-100x hızlanır ⚡
- Sunucu yükü azalır 🌡️
- Kullanıcı deneyimi iyileşir 😊
En çok hangi tablolarınızda index kullanıyorsunuz? Yorumlarda paylaşın! 💬
Bir sonraki yazımız: 🚀 [Laravel'de API Throttling: Aşırı Yüklenmeyi Önleme] - API'nizi kötüye kullanımdan koruyun!
#Laravel #Database #Performance #Indexing #WebDevelopment 🏎️
+(44).png&w=320&q=50)


