我有一个使用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";}
哪个会有更好的表现?
2号 问题,如果我在id上设置了索引
哪一个更好COUNT(id)
或COUNT(*)
第一个问题:
在COUNT()
内部,使用count ,服务器(MySQL)将以不同方式处理请求。
执行此操作时COUNT()
,服务器(MySQL)将仅分配内存以存储计数结果。
使用$row=$SQL->rowCount();
服务器时(Apache / PHP)将处理整个结果集,为所有这些结果分配内存,并将服务器置于获取模式,这涉及许多不同的细节,例如锁定。
请注意,它PDOStatement::rowCount()
返回受最后一条语句影响的行数,而不是返回的行数。如果关联程序执行的最后一条SQL语句PDOStatement
是一条SELECT
语句,则某些数据库可能会返回该语句返回的行数。但是,并非对于所有数据库都可以保证此行为,并且便携式应用程序不应该依赖此行为。
根据我的分析,如果使用COUNT()
,则该过程将分为MySQL和PHP,而如果使用$row=$SQL->rowCount();
,则该过程将更多地用于PHP。
因此COUNT()
在MySQL中速度更快。
第二个问题:
COUNT(*)
比更好COUNT(id)
。
解释:
count(*)
mysql中的函数经过优化,可以找到值的计数。使用通配符意味着它不会获取每一行。它只会找到计数。因此,请count(*)
尽可能使用。
资料来源:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句