首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP多行、连接字符串

PHP多行、连接字符串
EN

Stack Overflow用户
提问于 2009-08-06 19:42:21
回答 4查看 6.8K关注 0票数 2

这两者在速度/性能方面有什么不同吗?

代码语言:javascript
复制
$sql = "SELECT * "
     . "FROM `myTable` "
     . "WHERE `id` = 4";



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

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-06 19:50:04

也许一个非常非常小的差异,第一个可能有点慢(因为连接)……

..。但是,执行一个简单的SQL查询所花费的时间将是数千倍(可能是数百次,使用一个简单的查询--只是胡乱猜测,但您将会明白这一点)比这非常小的差异更重要!

因此,你真的不应该为这种“优化”而烦恼,考虑/选择什么是最容易写/读/理解和维护的。

编辑:只是为了好玩,下面是为第一部分代码生成的操作码:

代码语言:javascript
复制
$ 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

对于第二个问题:

代码语言:javascript
复制
$ 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

所以,是的,这是有区别的。但是,尽管如此,我之前所说的仍然是正确的:您不应该关心这种优化:您将在应用程序的其他部分(甚至是服务器的配置)中做很多“未优化”的事情,像这样的微小差异完全没有意义

好吧,除非你是google,并且有数千台服务器,我猜^^

票数 6
EN

Stack Overflow用户

发布于 2009-08-06 19:53:56

要测试这类东西,可以使用一个很大的while循环,并反复运行代码进行比较。执行此操作两次(或更多次)以比较操作。运行它几十次,然后跟踪结果。

代码语言:javascript
复制
ob_start();
$t = microtime(true);
while($i < 1000) {
    // CODE YOU WANT TO TEST

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

echo $tmp
票数 2
EN

Stack Overflow用户

发布于 2009-08-06 19:53:13

我认为后者更快。因为您在前者中使用了连接运算符,因此解析它可能需要一些时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1240951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档