1. Laravel ile Veritabanı Sorgularını İyi Optimizasyon Yapın
Örneğin, `users` tablosuna ait `posts` tablosunda veri çekmek için şu şekilde bir sorgu yazmak yerine:
$users = User::all();
foreach ($users as $user) {
echo $user->posts;
}
Bu şekilde yazdığınızda, Laravel her kullanıcı için ayrı ayrı veritabanı sorgusu yapacaktır. Bu da gereksiz yere veritabanınıza yük bindirir. Bunun yerine, Eager Loading kullanarak tek bir sorgu ile veriyi çekebilirsiniz:
$users = User::with('posts')->get();
Bu, her kullanıcıyla ilgili veriyi yalnızca bir kez sorgular, böylece performansı önemli ölçüde artırır.
2. Veritabanı İndeksleme Yöntemlerinin Performansa Etkisi
Örneğin, `posts` tablosunda title kolonu üzerinde sıkça sorgulama yapıyorsanız, bu kolonu indekslemek faydalı olacaktır. Bunun için şu şekilde bir migration oluşturabilirsiniz:
Schema::table('posts', function (Blueprint $table) {
$table->index('title');
});
İndeksler, sorgularınızı hızlandırırken, yazma işlemlerinde biraz yavaşlamaya neden olabilir. Ancak okuma performansında ciddi bir iyileşme sağlayacaktır.
3. Laravel Cache Kullanarak Veritabanı Yükünü Hafifletin
Örneğin, sıkça sorgulanan bir kullanıcı listesine sahipseniz, bu veriyi cache'leyebilirsiniz:
$users = Cache::remember('users', 60, function() {
return User::all();
});
Yukarıdaki kodda, `users` verisini cache'e kaydediyoruz ve 60 dakika boyunca bu veriye cache'den erişiyoruz. Bu sayede her sorgu, veritabanına gitmek yerine doğrudan cache'den çekilir, bu da performansı artırır.
4. Laravel'de Veritabanı Migrasyonları Sırasında Dikkat Edilmesi Gereken Optimizasyonlar
- Mikro migrasyonlar yaparak veritabanınızı küçük parçalara bölün.
- Veritabanı tablolarını optimize etmek için `OPTIMIZE TABLE` komutunu kullanın.
- Veri yedeklemeleri almayı unutmayın.
Bu adımlar, veritabanınızda meydana gelebilecek olası sorunların önüne geçmenizi sağlar.
5. MySQL Bağlantı Ayarlarını Optimize Edin
Özellikle, persistent connections (kalıcı bağlantılar) kullanmak, her sorgu için yeni bir bağlantı kurma gerekliliğini ortadan kaldırır:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => [
PDO::ATTR_PERSISTENT => true,
],
],
Bu, her sorguda yeni bir bağlantı açılmasını engeller ve uygulamanızın veritabanı bağlantısı üzerinde gereksiz bir yük oluşturmaz.