要获得结果集中的行数,有两种方法:
是使用查询来获取计数
$query="Select count(*) as count from some_table where type='t1'";
然后检索count的值。
在php中通过num_rows()获取计数。
哪一个更好的表现呢?
答案 0 :(得分:7)
如果您的目标是实际计算行数,请使用COUNT(*)
。 num_rows
通常(根据我的经验)仅用于确认返回的行数超过零并且在这种情况下继续。即使查询本身花费相同的时间,与COUNT
上的聚合相比,读取许多选定的行也可能需要更长的时间。
答案 1 :(得分:2)
答案 2 :(得分:2)
两者之间存在一些差异:
num_rows
是收到的结果行(记录)的数量。count(*)
是与查询匹配的数据库中的记录数。数据库可以配置为限制返回结果的数量(例如MySQL允许这样做),在这种情况下,如果限制低于匹配记录的数量,则两者的值可能不同。请注意,DBA可以配置限制,因此从SQL查询代码本身可能不明显适用的限制。
使用num_rows
计算记录意味着"传输"每条记录,所以如果你只需要一个总数(这将是一个记录/行),你最好不要再获得count
。
此外,count
可用于更复杂的查询方案,以执行子总计等操作,但num_rows
无法轻松完成。
答案 3 :(得分:1)
这取决于您的实施。如果你正在处理很多行,count(*)会更好,因为它不必将所有这些行传递给PHP。另一方面,如果您处理少量行,则差异可以忽略不计。
答案 4 :(得分:0)
num_rows()
会更好,如果有大量行,count(*)
会给你提供性能,你必须选择一行并将其发送给php。