php - PDO::rowCount 与 COUNT(*)

标签 php mysql optimization pdo

我有一个使用 PDO 的查询,首先计算行数,如果行 >1 则获取数据

SELECT * WHERE id=:id
$row=$SQL->rowCount();

if($row>0){
    while($data=$SQL->fetch(PDO::FETCH_ASSOC)){...

    }
}
else{echo "no result";}

SELECT COUNT(*), * WHERE id=:id
$data=fetch(POD::FETCH_NUM);
$row=data[0];


if($row>0){
//fetch data
}
else{echo "no result";}

哪个性能更好?

第二。问题,如果我在 id 上设置了索引

哪个更好 COUNT(id)COUNT(*)

最佳答案

第一个问题:

使用count COUNT(),服务器(MySQL)内部会以不同的方式处理请求。

在做COUNT()时,服务器(MySQL)只会分配内存来存储计数的结果。

使用 $row=$SQL->rowCount(); 时,服务器 (Apache/PHP) 将处理整个结果集,为所有这些结果分配内存,并将服务器置于获取模式,其中涉及很多不同的细节,例如锁定。

请注意,PDOStatement::rowCount() 返回受最后一条语句影响的行数,而不是返回的行数。如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,并非所有数据库都可以保证这种行为,并且不应依赖于可移植应用程序。

根据我的分析,如果你使用COUNT(),进程会被分到MySQL和PHP,而如果你使用$row=$SQL->rowCount();,对 PHP 的处理会更多。

因此 COUNT() 在 MySQL 中更快。

第二个问题:

COUNT(*) 优于 COUNT(id)

解释:

mysql 中的 count(*) 函数被优化用于查找值的计数。使用通配符意味着它不会获取每一行。它只找到计数。所以尽可能使用 count(*)

来源:

关于php - PDO::rowCount 与 COUNT(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19109774/

相关文章:

c# - 实例化具有初始值的类型是否比两个单独的语句便宜?

PHP 函数来显示站点周围的部分?

php - 当我尝试打开 phpmyadmin 时出现错误 403。我该怎么做才能纠正它?

php - 更新sql查询不会通过php中的mysqli_query()更新记录

php - 我的mysql查询如何将 'Şarapçı Çağ'更改为 'Sarapci-Cag'

mysql - 计划命令如何使用DB查询正确获取数据库信息

mysql - 很多mysql Sleep进程

c - 在 gdb 中,我的变量显示为 <optimised out>,我怎样才能找到它的值?

php - 不明白为什么我的联系表不发送电子邮件

mysql - 如何获取表中当前行的下一行和上一行