Bir büyük SQL Select deyimi veya birkaç küçük olanlar (Performans)?

7 Cevap php

MySQL gönderilen veri ile bir PHP sayfası inşa ediyorum.

(Ben bir numarası seçerim) 4 tablo katıldı, veya tablo ile 4 küçük SEÇ sorgular katılmak ile 1 SELECT sorgusu olması daha iyidir. Hangisi daha hızlı ve her yöntemin pro / con nedir?

PS. Ben sadece her tablodan bir satır gerekir.

7 Cevap

Bunu birçok şeye bağlıdır ve bu değişebilir çünkü gerçekten endişeli iseniz bir profil aracı çalıştırmak gerekir ama daha az sorgular derlenmiş ve veritabanına daha az tur gezileri ediliyor olması onun iyi bir kural olarak.

Eğer nerede kullanarak ve maddeleri üzerinde katılabileceğiniz gibi siz de bir şeyler filtre emin olun.

Muhtemelen veritabanı ne yapabilirim karşılaştırıldığında bütün bu sert vurdu olacak değil çünkü Ama dürüst olmak gerekirse, genellikle farketmez, optimizasyon zamanından önce bunu yapmak ve whats basit yapmamalıdır spec olmadığı sürece yani.

Yerine birden fazla sorgu Joın kullandığınızda, veritabanı kendi optimizasyonlar uygulamak için izin. Ayrıca potansiyel (bir INNER birden seçer ile katılmak yerine olsaydı) size app sunucusu ve veritabanı sunucusu arasındaki ağ trafiğini artırır, gerekmez satırları alınıyor. Onlar aynı kutu üzerinde olsanız bile, bu önemli.

Genellikle bir SELECT ifadesi var ve bu iyi. Veritabanları için ana nedenlerinden biri, sorgu biçimi özellikle, onlar bilgi işlem de hızlı olmasıdır.

Bu yaklaşımın herhangi bir sakınca varsa, bu büyük bir SELECT deyimi ile yapamazsınız analiz bazı çeşitleri vardır bu. RDBMS titiz bu geri benim özgün öneri hangi durumda bir veritabanı tasarım sorun olduğunu ısrar edecek.

Eğer DB onu getir sonra Bu verilerle ne bağlı olabilir. Eğer bağımsız dört sonuçlarının her kullanırsanız, o zaman dört ayrı SELECT ifadeleri olması daha mantıklı ve net olacaktır. Birlikte tüm veri kullanırsanız, diğer yandan, o zaman tek bir SELECT ile gitmek ve Joın istiyorum, bir tablo veya bir şey birleşik bir satır oluşturmak istiyorum.

PHP / MySQL biraz iş yaptık ve ben bile Joın ton ile büyük tablolar üzerinde sorgular, veritabanı optimize oldukça iyi olduğunu bulmak - akıllı dizinler varsa. Eğer performans konusunda ciddi iseniz Yani, query optimization and indexing hakkında okumaya başlayın.

Ben katılmak ile 1 sorgusu söyleyebilirim. Bu şekilde sadece bir kez sunucu vurmak gerekir. Tablolarınızın endeksleri ile katıldı ve eğer, bu hızlı olmalıdır.

Peki Oracle altında sorgu önbelleğe yararlanmak isterim, ve size sıralı işleme yapıyorsun küçük sorguları bir şey varsa son sorgu önbellek dışında ilk birini itti, eğer emmek olur ... sadece etrafında döngü ve sonraki geçişte (tabii ki farklı parametre değerleri ile) tekrar ilk sorguyu çalıştırmak için zaman.

Biz Java saklı yordamları kullanarak bir XML dosyası çıktı bina ve kesinlikle her sorgu bizi hayatta yiyordu için gidiş-dönüş sürelerini bulundu. Biz gerektiği gibi XML DOM içine bu değerleri fiş sonra, mümkün olduğunca az sorguları tüm verileri almak için çok daha hızlı bulundu.

Veri getirme olarak sadece olumsuz, Java kodu biraz daha şık olduğunu şimdi uzak kendi kullanımı oldu. Ama biz mümkün olduğunca sıfır zamanına yakın bir büyük ve karmaşık bir XML dosyası oluşturmak için vardı, bu yüzden biz hız için optimize zorunda kaldı.

Ancak birleştirme tablo ile uğraşırken dikkatli olun. Benim deneyim olmuştur, ancak bir tek birleştirme tabloları garip durumlar içine çalıştırabilirsiniz söz konusu olduğunda, çoğu durumda iyi olabilir katılın.