要获取记录总数,我通常会使用此查询:
$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;
在上面的两个查询之间。哪个更快更有效(当记录总数达到数百万时)?
答案 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(*)更快。