gpt4 book ai didi

php - PDO::rowCount 与 COUNT(*)

转载 作者:IT老高 更新时间:2023-10-28 23:50:30 32 4
gpt4 key购买 nike

我有一个使用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com