我正在计算sql数据库中的条目:
$sql = "SELECT * FROM files WHERE id = ?"; $q = $pdo->prepare($sql); $q->execute([$id]); $rowCount =$q->rowCount();
结果 $rowCount 是500000。但是输出这个数字需要5秒钟!有没有可能更快地得到这个结果?
$rowCount
lqfhib0f1#
SELECT * ... ,然后在php中计数,需要将所有行的所有列铲回php。这是一个很大的努力,但收效甚微。 SELECT COUNT(col) ... 通过mysql进行计数,但必须检查 col 是 NULL . 它需要得到 col 每行。 SELECT COUNT(*) ... 以最有效的方式计算行数。这涉及到寻找“最小的”索引(或者整个表,如果没有二级索引的话),并对其进行计数。你必须了解 INDEXes 在数据库里找到任何地方!这只是它们的一个小用途。
SELECT * ...
SELECT COUNT(col) ...
col
NULL
SELECT COUNT(*) ...
INDEXes
blpfk2vs2#
使用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
vhipe2zx3#
将*替换为一个字段(使用自动递增id)-这将减少一点时间。索引该字段。-如果使用索引字段,查询性能将提高。
3条答案
按热度按时间lqfhib0f1#
SELECT * ...
,然后在php中计数,需要将所有行的所有列铲回php。这是一个很大的努力,但收效甚微。SELECT COUNT(col) ...
通过mysql进行计数,但必须检查col
是NULL
. 它需要得到col
每行。SELECT COUNT(*) ...
以最有效的方式计算行数。这涉及到寻找“最小的”索引(或者整个表,如果没有二级索引的话),并对其进行计数。你必须了解
INDEXes
在数据库里找到任何地方!这只是它们的一个小用途。blpfk2vs2#
使用count()函数https://dev.mysql.com/doc/refman/8.0/en/counting-rows.html:
还要确保“id”是索引列:https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html
vhipe2zx3#
将*替换为一个字段(使用自动递增id)-这将减少一点时间。
索引该字段。-如果使用索引字段,查询性能将提高。