PHP Mysqli - 结果为0时SELECT *或SELECT COUNT(*)?

时间:2016-11-30 09:18:43

标签: php mysql sql performance

如果找不到行,SELECT *SELECT COUNT(*)之间的效果是否有任何差异?

我的聊天脚本每秒都会检查新消息,以便知道我是否需要计数(*)

服务器会更快更好:

$result = mysqli_query($con, "blablabla");

if(mysqli_num_rows($result) > 0)
{

}

OR

 $result = mysqli_query($con, "blablabla");
 $menge = mysqli_fetch_row($result);
 $menge = $menge[0];

if($menge > 0)
{

}

什么时候找不到行?!我要求进行AJAX聊天,大部分时间都没有新行。

1 个答案:

答案 0 :(得分:0)

使用基本查询时,2之间的时间差可以忽略不计(在重复执行查询时自然变化范围内)。使用复杂查询可能会产生显着差异,因为只有COUNT可以使用简化查询。

例如,如果完整查询需要子查询来获取分组集的最新详细信息,那么这可能会使完整查询变得非常慢。但是,计数可能只对是否存在行(而不是最新行的详细信息)感兴趣,因此不需要子查询。这可能会产生重大影响。

假设你有一个关于id的索引,你正在使用的值是或接近最大值(即,你不希望返回完整的1m记录,而不是最后几秒的最大记录)然后我不希望返回的数据量造成重大差异。

大的常量性能命中是连接到MySQL,以及数据库对查询的基本处理(即处理请求。不执行查询)。这些为任何查询提供了相当稳定的开销,对于简单的查询来说,这是一个非常重要的查询,一旦执行它就会很快。因此,有时候(当添加新行时)执行2次查询的开销可能会使得除非有新记录之外可以忽略不计的节省。