Kendimi bir sayfada kaç MySQL sorguları sınırlamak gerekir?

10 Cevap php

Tamam, ben sana bol deli veritabanı yoğun sayfaları inşa eminim ...

Ben gelen alakasız bilgi veritabanı her türlü çekmek istiyorum bir sayfa inşa ediyorum. İşte bu bir sayfa için bazı örnek farklı sorgular şunlardır:

  • makale içeriği ve bilgileri
  • Yazar kayıtlı bir kullanıcı, kendi bilgi IF
  • Makalenin görünümü sayacı GÜNCELLEMEYİ
  • yazı üzerine yorum almak
  • yorumların yazarları için bilgi almak
  • makalenin okuyucu imzalanmış ise, onlara bilgi için sorgu
  • vs ..

Ben bu temelde pratik oldukça yıldırım olacak, ve bazı birleştirmek olabilir ki biliyorum; ama bu anormal değil emin olmak istedim?

Kendinizi bir sayfada kaç oldukça normal ve un-ağır sorguları sınırlamak olur?

10 Cevap

Daha fazlası gibi gerektiği gibi olmasa da pek çok.

Gerçekten: (şu anda) optimizasyonu konusunda endişelenmeyin. , Ilk inşa performansı ikinci ölçmek ve IFF Bir yerde bir performans sorunu var, sonra optimizasyon ile başlar.

Aksi takdirde, optimizasyon gerekmez şey optimize çok zaman harcama risk.

Ben bir sorun olmadan onlara 50 sorgu ile sayfaları yaşadım. Eğer onlardan epeyce yapmak, böylece bir büyük olmayan (yani, ana bellekte sığar) tablosunda bir hızlı sorgu, 1 milisaniye veya daha az olabilir.

Az 200 ms bir sayfa yükler, bir çabuk sitesi olacak. Bunun büyük bir yığın sunucu ve tarayıcı arasındaki gecikme tarafından kullanılıyor, bu yüzden nişan gibi < Zaman 100ms sunucu üzerinde geçirdi. Eğer o süre içinde istediğiniz kadar sorguları yapmak.

Büyük bir darboğaz muhtemelen proje üzerinde harcamak zorunda zamanın miktarı olacak, böylece ilk optimize :) Eğer varsa, daha sonra kodu optimize edilir. İşte bu sorunla ilgili herhangi bir kod yazmak için gidiyoruz eğer, bu bariz ne kadar sorguları alıyor kılan bir şey yazmak, söyleniyor. Bu şekilde en azından Eğer bir sorununuz varsa öğrenebilirsiniz.

Ben bu herhangi bir doğru cevap var olduğunu sanmıyorum. Kendilerine dayatılan herhangi bir keyfi kap olmamalı, ben sürece sorguları hızlı olarak söyleyebilirim, ve sayfa bir mantık akışını izler. Ben sayfaları bir düzine sorgu ile uçmak gördüm, ve ben onları biri ile tarama gördüm.

Her sorgu veritabanı sunucusu için bir gidiş gerektirir, çok sorgularının maliyeti buna gecikme ile büyüdükçe.

Bir yuva da sunucu erişimi kontrol ve ne olursa olsun başka havai Eğer SQL ile var, tepki oluşturmak, sorgunuzu ayrıştırmak için var çünkü uygulama arasında ama çünkü hala sadece hafif bir hız ceza olacaktır aynı host üzerinde çalışıyorsa sunucular.

Yani genel olarak daha az sorguları olması daha iyidir.

Aynı algoritma SQL kendisi uğraşmadan uygulanabilecek zaman müşteri dilinizde bazı algoritması için girdi olarak malzeme alamadım: olsa, SQL mümkün olduğunca yapmaya çalışmalısınız. Bu sorgu sayısını azaltmak değil, aynı zamanda sadece ihtiyacınız satır seçmek bir hayli yardımcı olmaz.

Piskvor cevabı hala her durumda geçerlidir.

Wordpress, örneğin, 30 sorgular bir sayfa kadar indirebiliriz. Onları memchache olmanın bir - - ama şimdi ve söylemek gibi basit olacak, sadece emin çekin tüm verileri düzgün MySQL endeksli olduğundan emin olun ve üzülmeyin MySQL aşağı çekmek durdurmak için kullanabileceğiniz birkaç şey vardır sorgu sayısı hakkında çok.

Bir Çerçeve (örneğin CodeIgniter) kullanıyorsanız genellikle sayfa oluşturma kez veri çekme ve aşağı sitenizi çekerek nedir kontrol edebilirsiniz.

Diğer söylediğim gibi, tek bir numara var. Bunun için inşa edilmiş ne için SQL kullanmak ve birlikte veri kümelerini almak lütfen Mümkün.

Eğer bir döngü içinde bir SQL olduğunda genellikle yanlış bir şey yapıyor olabilir bir göstergesidir.

Mümkün Kullanım çeşitli açıklamalar gönderme karşı birlikte aittir verileri almak katıldığında.

Her zaman ifadeleri hiçbir ekstra alanlar / satır ile tam olarak neye ihtiyacınız almak emin olmak için deneyin.

Eğer sorguları gerekiyorsa, sadece bunları kullanmak gerekir.

Ben her zaman yapmaya çalıştığım şey, veritabanı bağlantıları yapmak için sayfanın (onlar ayrılmış eğer ...) farklı bölümleri için gerek yoktur, böylece onları, aynı yerde bir kerede idam sahip olmaktır. Ben bir sayfanın her parçası veritabanına bağlanmak zorunda daha değişkenlerin her şeyi saklamak için daha verimli rakam.

Benim durumumda, bu post-süreç yok çalıştırmak için on kat daha uzun sürer biri yapmak için iki sorgu ve daha sonrası süreç sonuçlarını yapmak daha iyidir. O dedi, bu zaten bir sonuç varsa sorguları tekrarlamak değil de iyidir, ve bu elde edilebilir birçok farklı yolu vardır.

Fakat bütün performans optimizasyonu etrafında odaklı. Eğer gerçekten ne yaptığınızı bilmiyorsanız Yani (ipucu: Bu durumda çoğu insan yok), sadece size ihtiyacınız veri için gereken sorguları yapmak ve daha sonra refactor.

Ben mümkün olduğunca az sorguları kendinizi sınırlayan gerektiğini düşünüyorum. Deneyin ve zaman mutlitask ve tasarruf sorguları birleştirmek.

Insanlar önce belirttiğimiz gibi erken optimizasyon bir sorun olduğunu, ancak bunun 'hızlı' çalışmasını sağlamak için kodunuzu kirletiyorsun orası. Ama insanlar çok bu 'atasözünü' alır.

Size sadece değiştirmeniz gerekecek gibi, paylaşılan hafıza önbellek uygulamak için gerektiğinde aklınızda ölçeklenebilirlik ile tasarlamak istiyorsanız, sadece veri yeterince soyutlanmış ve çağrıları merkezi olan yük ne olursa olsun emin olun, bu daha kolay hale getirecek Bir kaç yerde bir kaç şey.