【问题标题】:How can I count entries in mySQL database faster?如何更快地计算 mySQL 数据库中的条目?
【发布时间】:2018-05-14 10:30:11
【问题描述】:

我正在计算我的 SQL 数据库中的条目:

$sql = "SELECT * FROM files WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute([$id]);
$rowCount =$q->rowCount();

$rowCount 的结果是 500000。 但是输出这个单个数字需要 5 秒!是否有可能更快地得到这个结果?

【问题讨论】:

  • @PraveenKumar 谢谢。 “索引”是什么意思?
  • 我将无法有效回答。看看一些随机的东西:stackoverflow.com/q/13051246
  • @PraveenKumar SELECT COUNT(id) FROM.... 不会更快
  • @RiggsFolly *facepalm* 没错。
  • 虽然有 50 万行具有相同的 id 值让我认为 id 应该有一个更好的信息更丰富的名称:)

标签: php mysql pdo database-performance rowcount


【解决方案1】:

使用 COUNT() 函数https://dev.mysql.com/doc/refman/8.0/en/counting-rows.html

$sql = "SELECT COUNT(*) FROM files WHERE id = ?";

还要确保“id”是索引列: https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html

【讨论】:

    【解决方案2】:
    1. 将 * 替换为字段(使用自动增量 id) - 这将减少一点时间。
    2. 索引该字段。 - 如果使用索引字段,查询性能会提高。

    【讨论】:

      【解决方案3】:

      SELECT * ...,然后在 PHP 中计算,需要将所有行的所有列铲回 PHP。付出了很多努力却收效甚微。

      SELECT COUNT(col) ... 由 MySQL 进行计数,但它必须检查 col 是否为 NULL。它需要为每一行获取col 的值。

      SELECT COUNT(*) ... 以最有效的方式计算行数。这涉及查找“最小”索引(或整个表,如果没有二级索引),并通过它进行计数。

      必须了解INDEXes 才能访问数据库!这只是他们的一个次要用途。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 2019-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        相关资源
        最近更新 更多