mysql DB boyutlu PHP dizi veya birden fazla sorgu

5 Cevap php

Hi there
I'm using the PHPExcel lib which it seems to do great jobs, but in my approach it doesn't seem to be so fast.

I need to generate a excel file with allot of sheets, data, formulas and styles(bold, color, border) and it takes me allot of computing resources and time.
I think that my approach is not so good. Which has to be the right order when is about to generate this kind of file(excel) using PHP code and datas from a mysql DB.

1) generate all the sheets with no format/style, no formula, adding datas and the formulas and style
2) generate sheet by sheet with datas, adding formulas, adding style
3)....

Çok boyutlu bir dizideki DB tüm ihtiyaç verileri ve db ben yeni bir sayfa yazmak istiyorsanız her zaman sorgulamak için daha iyi değil mi?

Ben bir çift çekirdekli işlemci makine ve 4GB veya RAM kullanan ve Apache ezmek değilse 1 dakikaya beni alır ediyorum.

5 Cevap

Ben en çok zaman harcanan nerede PHP kodu bulmak için profil öneririm. Sen benim blog a step-by-step tutorial about using XDebug to profile PHP conde bulabilirsiniz. Sonra / en çok zaman tüketen parçaları optimize etmek için denemek en sık denir. Yapabileceğiniz en iyi optimizasyonlar biri mümkünse daha hızlı büyüklüklerdir, çünkü yerleşik fonksiyonları ile PHP yöntemlerini değiştirmektir.

Daha az, daha karmaşık sorguları yapmak üzere daha, daha basit sorguları yapmak için daha hızlı olabilir. O sorguladığınız veri üzerinde bir çok bağlıdır çünkü Ama kriter bunları gerekir.

O dedi, PHP bellek sorunları çalışıyor olabilir. Ne tavsiye ederim size veri işleme algoritması yeniden düzenleyebilirsiniz olmadığını görmektir. Ne doğru çalışan olacak bir seferde sadece tek bir büyük veri kümesi almak için, ama zaten bunu işlemek için gereken sırayla MySQL ile sıralanır. Sonra bir tampon sorgu kullanabilirsiniz.

Bir tamponsuz sorgusu istemci kütüphane koduna teslim etmeden önce tüm resultset saklamak anlamına gelir. Bu bir while() döngü ([{çağrı anlamına gelir - yani normal işlemek kütüphaneden daha büyük olabilir, ama bunun işe yaraması için, sizin işlem döngü her döngüsünde API bir satır getirme gerektiği anlamına gelir 1)]} her zaman.

İhtiyacınız sırayla zaten resultset aracılığıyla çalışan diğer avantajı, size ihtiyacınız olandan daha fazla sormak ve gitmek gibi filtre olabilir. Bu veritabanı tarafından less filtreleme olduğundan daha fazla sorarken Bu çalışıyor.

Veritabanı sorguları, 30.000 satır gibi dönmek bile olanlar, genelde sadece bir saniyenin bir kısmını alır. Böyle bir yordam ve RAM ile, muhtemelen IO de yavaşlatıyor. Ben çoğu zaman dosya (lar) yazmaya harcanan ediliyor bahis istekli olurdu.

Söyleniyor, ben ön tüm verilere sahip öneririm. En azından o, bellekten okuyorsun. Ben MySQL geçerli satır için bir işaretçi ile belleğe her şeyi yükler emin değilim, ya da yalnızca geçerli satır yükler eğer.

Bir dakikalık işlem süresi ile veri kümesi sonuç kümesinin bölümleme gerektirecek kadar büyük gelmiyor.

Böylece ile belleğe tüm yükleme iyi olurdu, kabul.

Ancak, mysql zaten sorgu önbelleğe, bu yüzden arda yinelenen sorgular ya büyük bir sorun olmamalı.

Diskteki dosya IO yazma yavaş nokta gibi ses yok. Ben stiller ve biçimlendirme xls dosyaları için nasıl çalıştığı hakkında çok şey bilmiyorum ama, herhangi bir in-line biçimlendirme yapmıyor böylece biçimlendirme azaltılması veya düzenleyerek bu anlamsız yazma bir çok azaltabilecek eminim eğer buysa bile mümkün.

Ben tavsiye ediyorum iyi şey sorgu optimize ediyor. Bu genellikle Ben sorunu bu tür bakmak ilk optimize yerdir. Eğer yazıyı düzenleyebilir ve sql içerebilir eğer ben bir göz olabilir. (Hassas bilgileri makasla & şerit çekinmeyin)

MySQL PHP katman daha veri herhangi hesaplamalar / dönüşümler gerçekleştirmek mümkün olacak, bu yüzden bir tablo için veri almak için tüm iş yapar bir sorgu yazmak istiyorsunuz.

Her tablo için bir kez yapmak daha.