哪个MySQL查询有效获取记录总数

时间:2012-10-11 03:36:31

标签: 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->num_rows;

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

第二个查询快速有效:

  

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

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

第一次查询的位置:

  

SELECT id FROM t_statistic WHERE pageid = $ pid

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

所以second查询在两个方面都是最好的。

答案 2 :(得分:0)

绝对是第二个。

某些引擎,比如MySQL只能通过查看索引而不是表的数据来计算。

我在数百万条记录的数据库中使用了类似的内容。

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

快于:mysql_num_rows($ res);

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

答案 3 :(得分: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(列)比count(*)更快。