哪个更快 - 比较查询中的值或查询后

时间:2018-04-21 22:50:21

标签: php mysql

选择大于零的记录哪个更快? 这样:

$query = "select locale, number_field from table where locale = 'US' and number_field > 0";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0){
//do something
}

或者这个:

$query = "select locale, number_field from table where locale = 'US'";
$result = mysql_query($query);
$sizearray=mysql_fetch_assoc($result);
if ($sizearray['number_field']>0){
    //do something
}

注意:是的我知道我使用的是不推荐使用的mysql函数,但是我有一个大型网站充满了查询,所以我还没有改变100个查询。

1 个答案:

答案 0 :(得分:1)

这取决于“number_field> 0”的记录数量以及该字段是否已编入索引。

locale和number_field上的索引将使得在MySQL中运行绝对值得。

另一方面,如果过滤器拒绝了很少的记录,那么通过libmysql(可能还有网络)传输的大量数据保持不变,查询可能运行慢点。 PHP的轻微延迟将由更快的查询补偿。

通常,带有常量的简单条件总是最好留给SQL。

但如果您有疑问 - 检查。在有代表性的数据样本(或者如果可以的话,整个数据)上重复运行两个版本,并计算它们需要的时间。

然而,在像这样的查询......

select locale, number_field from table where locale = 'US'

...您不想将locale添加到要返回的字段中。你知道它会是“美国”。此外,如果你真的只需要number_field,那么你正在进行的计算非常简单,你可以将它们卸载到MySQL,大大减少了返回的数据以及循环结果集的需要。