两个快速(我希望!)问题:
计算行数
在SQL查询中使用COUNT(id)
或仅选择所有行并在返回的资源上使用PHP的mysql_num_rows()
函数是否更有效?这取决于结果查询的大小吗?是否有一种相当简单的方法来确定这个问题的答案?
结果数组
目前,我在查询中使用COUNT(id)
,然后明显使用mysql_query()
和mysql_fetch_array()
,如下所示:
$sql = "SELECT COUNT(id) FROM TABLE1;";
$resource = mysql_query($sql) or die(mysql_error())
$result = mysql_fetch_array($resource);
$count = $result[0];
这会返回行数。但是,我很惊讶
$count = mysql_fetch_array($resource)[0];
不起作用;我收到错误:
Parse error: syntax error, unexpected '[' in C:\ServerDocs\file1.php on line 44
是否有一个简单的解释是什么发生?
提前致谢,
克里斯
答案 0 :(得分:0)
1)mysql_query获取所有结果,并对结果进行计数。因此,性能与结果数量有关。如果你计算(*)它是一个DB选择,它只产生一行/列。在这种情况下,数据库会为您完成所有操作,通常认为这更好。
2)$count = mysql_fetch_array($count)[0];
是不可能的。执行以下操作:
$count = mysql_fetch_array($count);
echo $count[0];
答案 1 :(得分:0)
这取决于具体情况,但SELECT COUNT(*)
通常更快。
原因很简单,就是使用数据库mysql_num_rows()
服务器必须实际构建结果集。使用COUNT(*)
,在
另一方面,DB可能只能确定行数
来自索引,这要快得多。所以如果你想要的只是计数,
那么mysql_num_rows()
最终会为此做更多的工作
结果
另一个缺点是mysql_num_rows无效
无缓冲的查询。所以如果你需要处理非常大的结果
设置,使用mysql_num_rows可能不是一个选项。但是,COUNT(*)
始终可用。
$count = mysql_fetch_array($resource)[0];
这种类型的语句在当前版本的php中是不可能的。 所以,最好使用
$no_of_rows = mysql_fetch_array($count);
echo $no_of_rows[0];