php sqlsrv_fetch_object performans

3 Cevap

Selamlar!

Ben sitemizde üzerinde kırpma, bir kaç performans sorunlarını çözmek için çalışılıyor. Bu çabanın bir parçası olarak ben ga göre bizim en trafficed sayfaları profilleme başladı.

Ben başlangıçta şüpheli gibi Esasen ben, tespit ettik, harcanan zamanın çoğunluğu veritabanı ile ilgili trafikte ... mantıklı. Yakından bakıldığında yazık ki, ne buldum oldukça kadar mantıklı ETMEZ.

Örneğin, bu özel çağrı, MyAlganon_Model_Library_Item :: fetchItemTooltipsByItemIdArray () Benim evreleme platformda dönmek 580.41ms alır.

Bunun 533.12ms sadece sqlsrv_fetch_object yapıyor döngüler fetchAll () fonksiyonu harcanan ise içine dalış o zaman 47.27ms üzerine) (sqlsrv_query harcanan:

$row = sqlsrv_fetch_object($this->query);

while ($row) {
  $results[] = $row;
  $row = sqlsrv_fetch_object($this->query);
}

return $results;

Bu özel sayfada, sonuç kümesindeki 742 satır vardır, gibi görünüyor. Belki sadece bana bir stdclass nesnesi oluşturmak için ne kadar sürer üzerinde gerçekçi bir kolu olmaması meselesi? 533.12ms 742 sonuçlarla karşılaşmışlardır yineleme ve nesneleri bir diziye bunları açmak için normal bir süre gibi görünüyor mu?

3 Cevap

Eğer yorumunuzda dediği gibi, 41 sütun ile 742 satırları sorgulamak.

Yani kullandığınız oldukça bazı veriler var. Tüm 41 sütunları, ama sadece satır bir kaç kullanıyorsanız, size sorgu bölünmüş olabilir. Toplamda daha az veri almak için optimize edebilirsiniz eğer daha fazla sorgular, her zaman verimsiz değildir.

742 satır 41 sütun kullanılır? Belki sizin için tüm verileri ihtiyaç 742 hangi satırları seçmek için basit bir sorgu yapabilirsiniz.

Eğer mssql_ ne yapıyorsun bağlı benim test sqlsrv_ göre yaklaşık 33-60% daha hızlı

Ben de sqlsrv kullanmaya çalışıyor ve bazen bağlamak ve basit bir sorgu gerçekleştirmek için birkaç saniye alıyor, gerçekten yavaş olabilir bulunamadı oldum - bir düzine satır ve sütun bir avuç bile bir masada. Bu hedef host (gerçek SQL Server, pahalı prim hosting) ziyade (bir yerel SQL Express bağlanırken) benim geliştirme sistemine daha hızlı oldu.

Web barındırma, hatta bazı testler yaptım ve "Bu sorun PHP için Microsoft SQL Server sürücüsü ile yatıyor, ve ille web veya veritabanı sunucuları veya ağ koşulları ile. Önermek gibi görünüyor" dedi O ADODB kullanarak karşılaştırarak oldu:. "Bu bir ODBC bağlantısı olduğunu unutmayınız, bu açıkçası, kararsız ve kaçınılmalıdır doğal PHP MSSQL sürücüsü kullanarak değil [...] Yukarıda test script rutin önemli ölçüde gerçekleştiriyor PHP için Microsoft SQL Server sürücüsü kullanarak bağlanır, diğer test script daha iyi. "

Ancak benim kendi sistemine, sqlsrv_connect ('odbc_mssql') $ conn = ADONewConnection daha (genellikle 0.1 ms ile 100 ms arasında) bağlamak için çok daha hızlı oldu; $ conn-> Connect (); (Genellikle 30 ila 200 ms-). Yine diğer hızları test: Bu proje daha gecikme duyarlı başka bir şey daha oldu.

Küçük bir not: (biraz temiz): Eğer sağlanan pasajı güncelleyebilirsiniz

while (($row = sqlsrv_fetch_object($this->query))) {
  $results[] = $row;
}
return $results;