Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

ay_akyuz

  • created_at ve updated_at alanlarına orderBy uygulamışsınız. Bu alanlarda normalde index olmaz, bu alanları böyle kullanacaksanız bunlara da index oluşturmanız lazım. Çok fazla kayıt varsa sorun olacaktır. Zaten sayfalama da göremedim, demek ki filtre sonucu ne işe hepsini yüklüyosunuz.
  • $query->where('pool_customer.customer_name', 'LIKE', '%' . $searchId . '%'); Eğer çok fazla müşteri varsa yavaş çalışır. Burada fulltext search ya da PostgreSQL kullandığınız için pg_trgm kullanın.
  • $query2->orWhereJsonContains('customer_ids', (string) $id); burada customer_ids alanı jsonb olmalı ve index gerekebilir.
  • $eagerLoadRelations = ['lock', 'statu', 'label', 'pool', 'user', 'tempCustomerData']; yaparak ilişkilerdeki tüm veriyi yüklemişsiniz. label:id,name gibi sadece ihtiyacınız olan alanları yükleyin. Bu şekilde alanları ayrı ayrı belirtirken ilişki many-to-many değilse kurulan sütunu da eklemeyi unutmayın. Yoksa kayıt sayısına göre çok fazla bellek tüketebilir.

Dikkatimi çekenler bunlar. Hangi alanda nasıl indeksler var bilmiyoruz ve ilişkiler de nasıl kurulu bilmiyoruz. Yapmanız gereken örneğin Laravel Telescope kullanıp filtreleme yaptığınızda oluşan sorguları almak ve EXPLAIN ANALYZE ile inceleyerek table scan yapan sorguları bulmak ve gerekli indeksleri oluşturmak. EXPLAIN çıktısını AI ile yorumlatabilirsiniz.

sineld, başlığı Laravel Filtreleme Optimizasyonu olarak değiştirdi.