 (44).png)
"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!
Database index, arama hızını artıran özel veri yapılarıdır:
// Indexsiz sorgu: 2.4s
$users = User::where('email', $email)->first();
// Indexli sorgu: 0.02s (120 kat hızlı!)
Schema::table('users', function (Blueprint $table) {
$table->index('email'); // Normal index
});
$table->unique('username'); // Aynı değerden sadece 1 tane
$table->index(['last_name', 'first_name']); // Çoklu sütun
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
$table->index('email', 'active_users_email_index')
->where('is_active', true);
$table->fullText('body'); // Blog içeriklerinde arama
$table->index('column'); // B-tree (Default)
$table->hashIndex('column'); // Hash (Eşitlik sorguları)
$table->spatialIndex('location'); // Coğrafi veriler
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
['a','b'] ≠ ['b','a'])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
];
}
}
SenaryoIndex ÖncesiIndex SonrasıKazanım100k kayıt arama1.8s0.02s90xSıralı listeleme1.2s0.15s8xJOIN sorguları3.4s0.4s8.5x
Doğru indexleme ile:
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 🏎️