如何更快地计算 mySQL 数据库中的条目数?
How can I count entries in mySQL database faster?
我正在计算我的 SQL 数据库中的条目:
$sql = "SELECT * FROM files WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute([$id]);
$rowCount =$q->rowCount();
$rowCount
的结果是500000。
但是输出这个单个数字需要 5 秒!是否可以更快地得到这个结果?
- 将 * 替换为一个字段(使用自动递增 id)- 这将减少一点时间。
- 索引该字段。 - 如果您使用索引字段,查询性能将会提高。
使用 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
SELECT * ...
,然后在 PHP 中计数,需要将所有行的所有列铲回 PHP。这是付出很多却收获很少。
SELECT COUNT(col) ...
按 MySQL 进行计数,但它必须检查 col
是否为 NULL
。它需要为每一行获取 col
的值。
SELECT COUNT(*) ...
以最有效的方式计算行数。这涉及查找 'smallest' 索引(或整个 table,如果没有二级索引),并对其进行计数。
您必须了解INDEXes
才能在数据库中取得任何进展!这只是他们的一个次要用途。
我正在计算我的 SQL 数据库中的条目:
$sql = "SELECT * FROM files WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute([$id]);
$rowCount =$q->rowCount();
$rowCount
的结果是500000。
但是输出这个单个数字需要 5 秒!是否可以更快地得到这个结果?
- 将 * 替换为一个字段(使用自动递增 id)- 这将减少一点时间。
- 索引该字段。 - 如果您使用索引字段,查询性能将会提高。
使用 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
SELECT * ...
,然后在 PHP 中计数,需要将所有行的所有列铲回 PHP。这是付出很多却收获很少。
SELECT COUNT(col) ...
按 MySQL 进行计数,但它必须检查 col
是否为 NULL
。它需要为每一行获取 col
的值。
SELECT COUNT(*) ...
以最有效的方式计算行数。这涉及查找 'smallest' 索引(或整个 table,如果没有二级索引),并对其进行计数。
您必须了解INDEXes
才能在数据库中取得任何进展!这只是他们的一个次要用途。