Php 哪个MySQL查询可以有效地获取记录总数

Php 哪个MySQL查询可以有效地获取记录总数,php,mysql,Php,Mysql,要获取记录总数,我通常使用以下查询: $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-&

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

$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;

在上述两个查询之间。哪一个更快速有效(当记录总数达到数百万条时)?

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

肯定是第二个

有些引擎,比如MySQL,只需查看索引而不是表的数据就可以进行计数

我在拥有数百万条记录的数据库上使用了如下内容

SELECT count(*) as `number` FROM `table1`;
比:mysql\u num\u rows($res)快得多


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

第二个查询快速高效:

从t_statistic中选择COUNT(id)作为num_行,其中pageid=$pid

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

其中,作为第一个查询:

从t_统计中选择id,其中pageid=$pid

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

因此,
second
查询在两种方式中都是最好的

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(*)相比,count(column)更快。

都假设select查询已成功,如果出现任何错误,都将崩溃。假设查询工作是一种不好的方式。可能是