使用count(*)vs num_rows

问题描述 投票:10回答:5

要获得结果集中的行数,有两种方法:

  1. 是使用查询来获取计数 $query="Select count(*) as count from some_table where type='t1'"; 然后检索count的值。
  2. 在php中通过num_rows()获取计数。

那么哪一个更好的表现呢?

php mysql
5个回答
7
投票

如果您的目标是实际计算行数,请使用COUNT(*)num_rows通常(根据我的经验)仅用于确认返回的行数超过零并且在这种情况下继续。即使查询本身花费相同的时间,与COUNT上的聚合相比,读取许多选定的行也可能需要更长的时间。


2
投票

由于您不必从数据库服务器检索如此多的数据,因此计数在性能和内存方面都要高效得多。如果您按单个列(例如唯一ID)进行计数,那么您可以更高效地获得它


2
投票

两者之间存在一些差异:

  1. num_rows是收到的结果行(记录)的数量。
  2. count(*)是与查询匹配的数据库中的记录数。

数据库可以配置为限制返回结果的数量(例如MySQL允许这样做),在这种情况下,如果限制低于匹配记录的数量,则两者的值可能不同。请注意,限制可能由DBA配置,因此从SQL查询代码本身可能不明显适用的限制。

使用num_rows计算记录意味着“传输”每条记录,所以如果你只想要一个总数(这将是一个记录/行),你最好不要使用count

另外,count可用于更复杂的查询场景,以执行子总计等事情,而num_rows无法轻松完成。


1
投票

这取决于您的实施。如果你正在处理很多行,count(*)会更好,因为它不必将所有这些行传递给PHP。另一方面,如果您处理少量行,则差异可以忽略不计。


0
投票

num_rows()会更好,如果你有少量的行和count(*)将给你性能,如果有大量的行,你必须选择一个并将其发送到PHP。

© www.soinside.com 2019 - 2024. All rights reserved.