如果找不到行,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聊天,大部分时间都没有新行。
答案 0 :(得分:0)
使用基本查询时,2之间的时间差可以忽略不计(在重复执行查询时自然变化范围内)。使用复杂查询可能会产生显着差异,因为只有COUNT可以使用简化查询。
例如,如果完整查询需要子查询来获取分组集的最新详细信息,那么这可能会使完整查询变得非常慢。但是,计数可能只对是否存在行(而不是最新行的详细信息)感兴趣,因此不需要子查询。这可能会产生重大影响。
假设你有一个关于id的索引,你正在使用的值是或接近最大值(即,你不希望返回完整的1m记录,而不是最后几秒的最大记录)然后我不希望返回的数据量造成重大差异。
大的常量性能命中是连接到MySQL,以及数据库对查询的基本处理(即处理请求。不执行查询)。这些为任何查询提供了相当稳定的开销,对于简单的查询来说,这是一个非常重要的查询,一旦执行它就会很快。因此,有时候(当添加新行时)执行2次查询的开销可能会使得除非有新记录之外可以忽略不计的节省。