Birden MYSQL sorguları vs Çoklu php foreach döngüleri

4 Cevap php

Veritabanı yapısı:

id  galleryId                 type     file_name       description
1   `artists_2010-01-15_7c1ec`  `image`  `band602.jpg`   `Red Umbrella Promo`
2   `artists_2010-01-15_7c1ec`  `image`  `nov7.jpg`      `CD Release Party`
3   `artists_2010-01-15_7c1ec`  `video`  `band.flv`      `Presskit`

Ben, vb bir uygulamanın bir bölümünde, başka videoları, görüntüleri çekin gidiyorum o yüzden gibi her bölüm için birden fazla mysql sorguları yapmak için daha iyi mi:

$query = mysql_query("SELECT * FROM galleries WHERE galleryId='$galleryId' && type='image');

... Ya ben bir ilişkisel dizi oluşturma ve sadece ben sonuç dizilişi ile gerektiğinde ve üzerinde dizi döngü olmalıdır?

Düşünceler için teşekkürler.

4 Cevap

Okunabilirlik veya performans: daha önemli ne bağlıdır. Ben veritabanı bağlantıları pahalı beri tek bir sorgu ve doldurulmasına PHP diziler, yürütmek daha hızlı olacağını beklersiniz, ama sonra her bölüm için basit bir sorgu daha okunabilir.

Bildiğiniz (ve sadece umut değil) ben ayrı sorgu için gitmek ve daha sonra bir sorun olacak gibi görünüyor eğer optimize dert olurdu trafik büyük miktarda almak için gidiyoruz sürece. Bu noktada böyle bir veri erişim katmanı oluşturma ve bazı önbelleğe ekleme gibi yine yapmak isteyeceğiniz başka şeyler, orada olacağım.

"Bölümler" ile kullanıcıların görebilirsiniz ki ayrı ayrı tek tek sayfaları (ayrı HTTP istekleri) demek, ben sorgu başına tipi gerektiği gibi öneririm. Bir sayfada yalnızca görüntü veri setleri bulunmaktadır nerede iseniz, gerçekten örneğin seti video verilerini almak gerekmez. Gerçekten (I varsayıyorum.) Yine vurmak her sayfa için veritabanına bağlanırken olacağından, her şeyi getiriliyor çok zaman tasarrufu olmayacak

"Bölümler" ile tek bir sayfada farklı bölümlerini demek, o anda her şeyi getir. Bu sorgulama üzerinde size zaman kazandıracak (yalnızca bir sorgu.)

Ama veri kümesinin boyutuna bağlı olarak, olsa, her şey için PHP'nin bellek sınırı sorgulama ile sorun haline çalıştırmak olabilir. Daha sonra hafıza limitini yükselterek deneyebilirsiniz, ancak başarısız olursa muhtemelen sorgu başına tipi geri düşmek gerekir.

Sadece talep ve gerçekten ihtiyacınız olan şeyleri getiriliyor olacak gibi sorgu başına tipi yaklaşımı kullanarak, veritabanı sunucusu işlem yükünün bazı taşır. Ve size sonuçları filtrelemek ve sıralamak için kod yazmak zorunda değilsiniz. Filtreleme ve sıralama veritabanı genellikle PHP kodu daha da iyi bir şeydir. Eğer mümkünse, MySQL sorgu önbelleği etkinleştirmek, o bu sorguları PHP yazabilen şey çok daha hızlandırır.

Veri tek bir tablodan geliyorsa, ben yalnızca bir sorgu yapardı.

Ben medya türüne göre sıralanmış sorgu dönüş sonuçlarınızı yazın resim vb için bir bölüm, video için bir bölüm, müzik için bir bölüm, tek bir sayfa inşa ediyoruz sanırım - sonra tüm resimlerin, sonra tüm video yineleyemezsiniz tüm müzik.

Iyi çoklu sorgu var. Bir sorgu tüm verileri çalıştırmak her zaman çıkardı ve belleğe yüklenen oluyor. 5 farklı türleri varsa, bunu yapmak için ihtiyacı olduğu, bu tür her sayfa 5 kat daha fazla veri yüklenmesi anlamına gelir.

Hatta sadece tek bir seferde birlikte, muhtemelen 100 den fazla ya da ancak çok makul bir anda bir sayfada görüntüleyebilirsiniz varsa SINIRI / oldukça hızlı bir şekilde sorgular OFFSET ile paginating başlamak istiyorum için gidiyoruz.