【问题标题】:What's the most efficient way to count rows in a table?计算表中行数的最有效方法是什么?
【发布时间】:2011-07-13 05:04:17
【问题描述】:

使用起来是否更有效率:

$sql = 'SELECT COUNT(*) AS count FROM users';
$odbcResult = OdbcExec($sql);
@odbc_fetch_row($odbcResult);
$count = @odbc_result($odbcResult, 'count');

或使用:

$sql = 'SELECT * FROM users';
$odbcResult = OdbcExec($sql);    
$count = odbc_num_rows($odbcResult);

【问题讨论】:

    标签: php mysql odbc


    【解决方案1】:

    前者。服务器正在做这项工作。它可能已经不用数数就知道答案了,

    后者要求所有行都通过网络返回到您的程序(并返回到内存中)。

    【讨论】:

    • +1 和答案。 “服务器正在做这项工作”——听起来不错。
    【解决方案2】:
    $sql = 'SELECT COUNT(id) AS count FROM users';
    $odbcResult = OdbcExec($sql);
    @odbc_fetch_row($odbcResult);
    $count = @odbc_result($odbcResult, 'count');
    

    或除 id 之外的其他一些索引字段。它比 COUNT(*) 快一点,但是 count 方法是要走的路。如果您需要对结果做一些事情,方法 2 更快,但只需要计算这是您想要的。

    -edit- 在字段前添加索引关键字。下面的真实评论,假设有一个 id 索引列(无论如何都应该有一个索引)

    【讨论】:

    • 请注意,SELECT COUNT(id) AS count FROM users 返回非空 id 值的数量。如果列上有一个 NOT NULL 约束,这可能无关紧要,但如果没有 NOT NULL 约束,那么 DBMS 必须做更多的工作来回答这个查询而不是 COUNT(*)。如果相关列上没有索引,则更是如此。
    • 我没有在 MySQL 上测试过,但我发现 COUNT(1) 在 Oracle 上是一个有效的值。
    【解决方案3】:

    用 x>=6 的 10^x 个元素填充一个表并查看花费的时间。

    【讨论】:

      【解决方案4】:

      第一种方法肯定更快。但是 COUNT(id) 比 COUNT(*) 快 - 值得怀疑。它们通常完全相同,并且在某些情况下 COUNT(id) 实际上更慢(请参阅:http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/

      【讨论】:

        猜你喜欢
        • 2013-01-23
        • 2011-01-26
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 2017-12-06
        • 2014-11-08
        • 1970-01-01
        相关资源
        最近更新 更多