5

要获取记录总数,我通常使用以下查询:

$total= mysql_num_rows(mysql_query("SELECT id FROM t_statistic WHERE pageid = $pid"));

但我得到了另一个查询,如下所示:

$data = mysql_fetch_object(mysql_query("SELECT COUNT(id) AS num_rows FROM t_statistic WHERE pageid = $pid"));
$total = $data->num_rows;

在上面的两个查询之间。哪个更快更有效(当记录总数以百万计时)?

4

4 回答 4

5

我更喜欢第二个查询。它已经为您提供了记录计数,而第一个查询为您提供了 ID 列表(而不是计数),尽管它已被过滤,但在某些情况下 ID 在表中存在多次。

于 2012-10-11T03:38:17.277 回答
1

第二个查询快速有效:

SELECT COUNT(id) AS num_rows FROM t_statistic WHERE pageid = $pid

如果您了解查询优化。在计算答案时,查询只会在内存中保留计数。并直接给出行数。

作为第一个查询:

从 t_statistic WHERE pageid = $pid 中选择 id

将所有选定的行保存在内存中。然后在进一步的操作中计算行数。

所以second 查询是最好的两种方式。

于 2012-10-11T03:52:07.933 回答
0
1) SELECT COUNT(*) FROM t_statistic WHERE pageid = $pid" --> count(*) counts all rows

2)SELECT COUNT(id) FROM t_statistic WHERE pageid = $pid" --> COUNT(column) counts non-NULLs only

3) SELECT COUNT(1) FROM t_statistic WHERE pageid = $pid" -->COUNT(1) is the same as COUNT(*) because 1 is a non-null expressions

Your use of COUNT(*) or COUNT(column) should be based on the desired output only.

所以。最后我们得到的结果是 count(column) 比 count(*) 更快。

于 2012-10-11T04:02:06.040 回答
0

绝对是第二个。

一些引擎,比如 MySQL 可以只通过查看索引而不是表的数据来进行计数。

我在具有数百万条记录的数据库上使用了类似以下的内容。

SELECT count(*) as `number` FROM `table1`;

比: mysql_num_rows($res); 快得多

顺便说一句:Count(*) 中的 * 基本上意味着它不会查看数据,它只会计算记录,而不是 Count(colname)。

于 2012-10-11T03:49:16.297 回答