【发布时间】:2013-11-05 13:48:29
【问题描述】:
这是我无法解释的非常奇怪的事情,但可能你们中的一些人已经发现了相同或类似的问题?
想象一下下面的伪 PHP 代码:
<?PHP
mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("mydb");
$result = mysql_query("SELECT id, my_name FROM my_table");
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$row[1] ? echo $row[1] : echo $row[0];
}
mysql_free_result($result);
?>
这基本上只是查询 mySQL 服务器并遍历所有记录集。
然后,它使用“速记”if 语句来查明my_name 列中是否有内容。如果有,它将打印它,如果没有,它将打印id。
现在奇怪的部分是,在 Debian Linux 虚拟机上,在 ESX5 上运行这个简写 if 比普通的 if{}else{} 语句要长 10 倍。
所以在我的例子中不是 3 秒(迭代 5000 条记录),而是在这个特定的 VM 上需要 30 秒 - ESX4 Debian 主机上的相同代码运行得很好。
如果我用普通的 IF 语句替换速记 IF,一切都很好。
我在互联网上做了一些研究,但找不到解释。 您将从哪里开始搜索问题?
谢谢! // 马库斯
【问题讨论】:
-
只是好奇,但是如果您使用 echo $row[1] ,速度比较是多少? $row[1] : $row[0];
-
开始测试...从等式中消除 mysql。构建一个结果数组,然后在数组上循环,这样就不会调用 mysql。
-
进行测试 ^^ 上百万次尝试以正确平均速度。
-
确实应该是:echo ($row[1] ? $row[1] : $row[0]);在 ?非常奇怪。
-
哦,它真的应该是
echo ($row[1] ? $row[1] : $row[0])- 我将重新运行测试,看看这是否会有所不同。 (rtfm :))
标签: php linux performance apache virtual-machine