işte aradığım cevaplar like bile yetersiz kalır deneyiminizi paylaşmanıza. daha sonra size yine bu konuyla ilgili danışabilir miyim?
TheKhan adlı üyeden alıntı: mesajı görüntüle
Ben nasıl yapıyorum:
  • Sorgu süresini PHPMyAdmin üzerinden kontrol ediyorum. Sorguyu oraya yapıştırıyorum ve kaç saniyede sonuçlandığına bakıyorum. Eğer burada süre sayfanın yüklenme hızı ile alakasız ise diğer kodlarda sorun var demektir
  • Sadece gerekli sütunları alıyorum. Gereğinden fazla sütun almak zaten ek yük oluşturur
  • Veritabanı tablolarının indexlerini kullanıyorum. Gerekmedikçe "like" aramaları yapmıyorum, gerek duyacak şekilde verilerimi kaydetmiyor, raporları hazırlamıyorum
  • Veritabanından aynı verileri sürekli çekme gibi birşey var ise onun yerine "dip toplam" tablosu alıyorum. Örneğin X tarihinde Y verisinin durum neydi? gibi bir soru var ise, bu soruyu cevaplamak için istenen verileri başka bir tabloda tek satır olarak kaydediyorum. Muhasebe yazılımlarının genel olarak yaptığı budur, sürekli hesaplama yapılsa o program çalışmaz. Verileri değiştirilemez ve istenildiğinde hızlıca ulaşılacak şekilde kaydederler.
  • Var sayalım 10000 ürün içeren bir tablonun tüm ürünlerini alacağız. Bu durumda sorgumuzda join yada "select (select ....)" gibi iç içe sorgu yazmıyorum. Onun yerine kategori tablosunu ayrıca çekip ayı bir parametrede saklıyorum. Şöyle örnekleyeyim. Araç kiralama firmasında çalışıyorum ve 80 çeşit aracımız var. Günlük işlenen rezervasyon sayısı 1000 civarı var sayalım. İç içe sorgu yada join gibi bir yaklaşımda 1000 satırla beraber 80 satırı her sonuç için tekrar sorgulamam gerekebilir. Onun yerine 80 satırın tümünü alıyorum ve 1000 satırı listelerken dizi indislerini kullanıyorum (Ör: $arac[$rezervasyon['arac_id']]['aracadi'] gibi ). Böyle anlatınca çok ciddi birşey değil gibi durabilir, ancak zaten araç tiplerini başka bir amaç ile çekmiş oluyorum, ek olarak sorguya yazmama gerek kalmıyor.
  • Bir döngüde yapabileceğim işleri en yüksek seviyeye getirmeye çalışıyorum. Aynı veriyi 2 defa foreach'e sokmam performansı düşürecektir. Yine de tekrar döngüye girmesi gerekiyorsa en minimal hali ile yapıyorum.
  • Döngülerde IF ve switch gibi karar fonksyonlarını kullanmakta çekingen davranıyorum, filtreleme yapmam gerekiyorsa bunları veritabanında yapmaya çalışıyorum.
  • PHP çekirdek fonksyonlarını kullanıyorum.
Sanırım yeterli