MySQL vs PHP veri işleme hızı

5 Cevap php

Şimdiden özür dilemek bu saçma bir soru ama ben aşağıdaki basitleştirilmiş senaryoda hızlı / daha iyi olabilir merak ediyorum eğer ...

Ben (bir kullanıcılar tablodaki) kayıtlı kullanıcımız var ve ben aşağıda kabaca olarak (bir ülke tablosunda) ülkeleri var:

USERS TABLE: user_id (PK, INT) | country_id (FK, TINYINT) | other user-related fields...

COUNTRIES TABLE: country_id (PK, TINYINT) | country_name (VARCHAR) | other country-related fields...

Şimdi, bir kullanıcının ülkeyi görüntülemek için ihtiyacınız olan her zaman, ben bir MySQL katılmak yapmak gerekir. Ancak, sık sık kullanıcılar ve büyük resmi ile ilgili diğer birleşimlerin çok yapmanız gereken oldukça "join-ağır" gibi görünüyor.

Ben ne artılarını ve merak ediyorum eksilerini kolayca country_id kullanarak aramaları kamu yöntemi ile onları almak olabilir hangi, veritabanından ülkeleri alarak ve bir dizi olarak bir sınıf içine yapışmasını olabilir? Bir hız avantajı / dezavantajı var olurdu?

Çok teşekkürler.

EDIT: çok yararlı tüm görünümleri, için teşekkürler. Tüm katkıları değerli olmasına rağmen ben kabul çözüm olarak ilk cevabı seçeceğiz.

5 Cevap

Bu (Dünyada pek çok ülke var olmayan) belirgin değil bu yüzden daha az JOIN deyimleri olması için MySQL sunucu üzerinde stresini azaltabilir, ama olacaktır. Ancak, PHP kendinizi JOIN uygulamak gerekir ki aslında o zaman kadar yapacağız. Eğer kendiniz yazıyoruz beri, muhtemelen daha fazla zaman alacak anlamına gelir, SQL deyimi daha az verimli bir şekilde yazacağım. Ben dışarı hareket avantajları çok az (ve PHP örneği ve MySQL örneği aynı kutu üzerinde iseniz, gerçek avantajları yok) olduğundan, SQL server tutarak öneriyoruz.

Do you have a serious problem performance problem now? Geçenlerde benim şirket için geliştirilmiş bir PHP / MySQL web sitesinde bir performans iyileştirme geçti. Bazı alanlarda çok yavaş, ve bu arıza bir çok sorgular kendileri ile oldu çıktı. Ben sorgular yavaş anlamaya zamanlayıcılar kullanılır, ve ben (katma indeksler, vb) onları yeniden. Birkaç durumda, (Ben bazı oldukça karmaşık katılır vardı) iki ayrı sorgu yapmak ve php onlara katılmak için hızlıydı.

Eğer bir sorununuz varsa bilmek kadar optimize etmeye çalışmayın. Bunu ölçerek ilk bir sorun varsa anlamaya, ve sizin sorguları yeniden gerekiyorsa o zaman bir gelişme yapılmış olmadığını bilmek mümkün olacaktır.

Ne önermek daha hızlı olmalıdır. Verilen, çok mal olmaz muhtemelen katılmak, ama bir sözlüğe bakarak kadar işlem gücü gider gibi sadece serbest olmalıdır.

Bu gerçekten hız bellek kapalı sadece bir ticaret. Görebildiğim Sadece olumsuzlukları elbette ülke bilgisi ve hiç (çok sık değil muhtemelen) ülkeleri tablosunu güncelleştirmek eğer o önbellek geçersiz olurdu gerçeğini saklamak için artan bellek kullanımı olacaktır.

Ben tüm sonuç satırları üzerinde yineleme olurdu gibi, size katılmak çıkarmadan bir şey elde ediyorum düşünüyorum ve elle ben MySQL yapabilirim daha hızlı olacağını sanmıyorum ülke adı, arama yok.

Ben de şu nedenle böyle bir yaklaşım dikkate olmaz: (demek, bir yazım hatası var), sadece veritabanında bir satır güncelleme yapabilirsiniz bir ülkenin adını değiştirmek istiyorsanız. Ülkelerin isimleri PHP kodu Ama eğer, bir değişiklik yapmak için kod dağıtmanız gerekiyor. Ben PHP bilmiyorum, ama bu kadar straightforard bir üretim sisteminde bir DB değişiklik daha olmayabilir.

Yani idame nedenlerle, IMHO DB çalışma yapalım.

Bir veritabanı dünyada genel kural daha sonra NORMALİZE ilk (daha fazla tablodaki sonuçlar) ve şekil performans sorunları olduğunu.

Sen performans için, kod sadeliği için sadece denormalized isteyeceksiniz. Indeksler ve saklı yordamlar kullanın. DBMS katıldı optimize etmek için tasarlanmıştır.

"Eğer gitmek gibi normalleştirmek" değil nedeni, zaten çoğu veritabanı tasarımını değiştirmek her zaman yazdım kodunu değiştirmek zorunda olmasıdır.