查询中的PHP vs MySQL性能(如果,函数)

时间:2012-11-01 11:51:19

标签: php mysql performance benchmarking

我刚看到这个artice

我需要知道在这种情况下什么是最佳的绩效

如果查询中的陈述

SELECT *,if( status = 1 , "active" ,"unactive") as status_val FROM comments

VS

<?php
    $x = mysql_query("SELECT * FROM comments");

     while( $res = mysql_fetch_assoc( $x ) ){
       if( $x['status'] == 1 ){
             $status_val = 'active';
        }else{
             $status_val = 'unactive';
        }
     }
  ?>

从字符串

中剪切10

SELECT * , SUBSTR(comment, 0, 10) as min_comment FROM comments

VS

<?php
    $x = mysql_query("SELECT * FROM comments");

     while( $res = mysql_fetch_assoc( $x ) ){
       $min_comment = substr( $x['comment'],0,10 ) ;
     }
  ?>

等????? 当我使用MYSQL函数或PHP函数时?

5 个答案:

答案 0 :(得分:4)

取决于。 从网络的角度来看,在第一个VS中,PHP获胜,而在第二个VS中,MYSQL获胜。那是因为您通过套接字发送的数据较少。因此脚本变得更快。

答案 1 :(得分:2)

以下是您的问题的一个很好的描述: Doing calculations in MySQL vs PHP

如果是第二个例子,速度问题可能很严重。 首先,你不知道你的评论有多大,所以在

的情况下
$x = mysql_query("SELECT * FROM comments");

 while( $res = mysql_fetch_assoc( $x ) ){
   $min_comment = substr( $x['comment'],0,10 ) ;
 }

您要求您的服务器返回所有内容(此处我的意思是评论的整个长度),这可能很重要。乘以表中的行数,它可以是相当大的数据大小,您必须在php和sql之间传输。在第二种情况下,SELECT * , SUBSTR(comment, 0, 10) as min_comment FROM comments 这将在服务器上完成,不需要额外的内存。

在第一个例子的情况下,我认为在sql端做它也更好,因为之后你还需要做额外的循环。除此之外,将会阅读您的代码的人可能会混淆为什么您需要该代码。

答案 2 :(得分:1)

在这种情况下,使用MySQL函数可以防止在PHP中循环并为您节省大量代码。

在其他情况下,他们别无选择:例如,当您在WHERE部分使用它们时。

就性能而言,在大多数情况下,差异是微不足道的:使用最简单的解决方案。

答案 3 :(得分:0)

只回答:测量它!您有两个工作解决方案,希望实现最佳执行时间。

答案 4 :(得分:0)

我说这一切都取决于任何一端和当前负载的系统。通常,DB服务器比桌面计算机更强大,在数据库端执行整个操作会更快,而不是将其拆分并部分使用PHP。