【发布时间】:2013-10-07 05:37:35
【问题描述】:
我有一个使用 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(*) 哪个更好
【问题讨论】:
-
注意:对于 select 语句,并非所有数据库都会通过
PDO::rowCount返回行数,强 iirc MySQL 会这样做。 -
你的SQL语句不会如你所愿,去掉第二颗星
SELECT COUNT(*) FROM tablename WHERE id=:id。 -
@martinstoeckli 这个声明没问题。虽然问题中的唯一陈述
-
@YourCommonSense - 据我了解,
count(*)总是返回 1(或 0),因为第二颗星总是返回唯一的行,所以它没有意义。但是正如您正确指出的那样,如果问题仅是是否存在一行,它就可以工作,我会投票赞成您的答案。 -
@martinstoeckli 实际上第二颗星将返回语法错误。而 count(*) 将返回找到的所有行数
标签: php mysql optimization pdo