【问题标题】:Which MySQL query is effective to get the total number of records哪个mysql查询有效获取总记录数
【发布时间】:2012-10-01 15:50:39
【问题描述】:

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

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

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

【问题讨论】:

标签: php mysql


【解决方案1】:
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(*) 更快。

【讨论】:

    【解决方案2】:

    绝对是第二个。

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

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

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

    比:mysql_num_rows($res); 快得多

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

    【讨论】:

      【解决方案3】:

      第二个查询快速高效:

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

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

      作为第一个查询:

      从 t_statistic WHERE pageid = $pid 中选择 id

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-04
          • 1970-01-01
          • 2011-10-26
          • 1970-01-01
          • 2012-07-11
          • 2015-10-14
          • 2018-07-16
          • 2019-06-10
          相关资源
          最近更新 更多