PHP satırlı, Zincirleme dizeleri

4 Cevap php

Ikisi arasındaki fark, hız / performans şartlarını int?

$sql = "SELECT * "
     . "FROM `myTable` "
     . "WHERE `id` = 4";



$sql = "SELECT *
        FROM `myTable`
        WHERE `id` = 4";

4 Cevap

Belki çok çok very small fark, belki biraz daha yavaş olan ilk (because of concatenations) ...

... Ama tek bir basit bir SQL sorgusu çalıştırmak için alınan zaman çok küçük bir farkla daha önemli binlerce kez (maybe hundreds, with a simple query -- just a wild guess, but you'll see the point) olacak!

Yani, gerçekten "optimizasyonlar" bu tür hakkında rahatsız olmamalı, ve hem de en kolay anlamak / okumak ve korumak / ne yazmaya / seçmek düşünün.


EDIT : sadece eğlence için, burada kod ilk bölümü için oluşturulan opcodes şunlardır:

$ php -dextension=vld.so -dvld.active=1 temp-2.php
Branch analysis from position: 0
Return found
filename:       /home/squale/developpement/tests/temp/temp-2.php
function name:  (null)
number of ops:  6
compiled vars:  !0 = $sql
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   5     0  EXT_STMT
         1  CONCAT                                           ~0      'SELECT+%2A+', 'FROM+%60myTable%60+'
         2  CONCAT                                           ~1      ~0, 'WHERE+%60id%60+%3D+4'
         3  ASSIGN                                                   !0, ~1
   8     4  RETURN                                                   1
         5* ZEND_HANDLE_EXCEPTION

Ve, ikinci biri için:

$ php -dextension=vld.so -dvld.active=1 temp-2.php
Branch analysis from position: 0
Return found
filename:       /home/squale/developpement/tests/temp/temp-2.php
function name:  (null)
number of ops:  4
compiled vars:  !0 = $sql
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   7     0  EXT_STMT
         1  ASSIGN                                                   !0, 'SELECT+%2A%0A++++++++FROM+%60myTable%60%0A++++++++WHERE+%60id%60+%3D+4'
   9     2  RETURN                                                   1
         3* ZEND_HANDLE_EXCEPTION

Yani, evet, hala, ne daha önce söylediğim hala doğrudur, orada bir fark var ... Ama: optimizasyon bu tür umurumda olmamalı: Eğer diğer bölgelerinde pek çok "-optimize yok" şeyler yapacağız Başvurunuzun (or even if the configuration of your server) bu gibi küçük bir fark absolutly hiçbir şey anlamına gelir


Well, except if you are google and have thousands of servers, I guess ^^

i ikincisi daha hızlı olduğunu düşünüyorum. Eğer ayrıştırma hangi eski içinde birleştirme operatörü kullandım çünkü biraz zaman alabilir.

Şeyler bu tür test etmek için, döngü sırasında büyük bir kullanmak ve karşılaştırmak için over-ve-over kodu çalıştırın. Bu iki (veya daha fazla) işlemleri karşılaştırmak etmeyin. Ona birkaç düzine kez çalıştırmak ve sonuçlarını izlemek.

ob_start();
$t = microtime(true);
while($i < 1000) {
    // CODE YOU WANT TO TEST

    ++$i;
}
$tmp = microtime(true) - $t;
ob_end_clean();

echo $tmp

Ben ilk, çünkü birleştirme biraz uzun sürebilir düşünüyorum, ama bu kadar fark olacak değildir. Eğer optimizasyonu hakkında endişeli iseniz veritabanında saklanan prosedürleri yerine kullanarak sizin php kodu sqls yazarak başlayabilirsiniz. Bu hız aynı zamanda güvenliği artırmak değil sadece.