design

Laravel'de Database Indexing: Performansı %500 Artırma Rehberi

April 4, 2025

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✅ EvetemailusernameSı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: refpossible_keys: emailkey: email

6. Sık Yapılan Hatalar ⚠️

  1. Gereksiz indexler (Performansı düşürür)
  2. Çok geniş indexler (text/varchar(255) gibi)
  3. Sık güncellenen sütunlar (Her update indexi de günceller)
  4. 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 🏎️

8 + 0 =