10

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

  1. 是使用查询来获取计数

    $query="Select count(*) as count from some_table where type='t1'";

    然后检索计数的值。

  2. 在 php 中通过 num_rows() 获取计数。

那么哪一个性能更好呢?

4

5 回答 5

7

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

于 2013-08-23T18:40:51.700 回答
3

两者之间有一些区别:

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

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

使用num_rows对记录进行计数意味着“传输”每条记录,因此如果您只想要一个总数(这将是一个记录/行),那么最好count不要使用它。

此外count,还可以在更复杂的查询场景中使用小计之类的操作,而num_rows.

于 2013-08-23T18:47:16.440 回答
2

count 在性能方面和内存方面都更有效,因为您不必从数据库服务器检索这么多数据。如果您按单个列(例如唯一 ID)进行计数,那么您可以提高效率

于 2013-08-23T18:40:42.780 回答
1

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

于 2013-08-23T18:42:11.673 回答
0

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

于 2013-08-23T18:40:58.840 回答