我的所有网站都建立在使用PDO的php和mysql堆栈上。我很清楚各种方法可以找出特定查询可以返回的行数,但我不知道如何找出哪个行更有效。
$stmt = $db->prepare('SELECT COUNT(ID) FROM table WHERE name = :name');
$stmt->bindParam(':name', $name);
$stmt->execute();
while($row = $stmt->fetch()) {
$counter = $row[0];
}
在这个例子中,我只对计算特定查询的结果数感兴趣。查询进行一次,结果以$ counter变量返回。
$stmt = $db->prepare('SELECT ID FROM table WHERE name = :name');
$stmt->bindParam(':name', $name);
$stmt->execute();
$counter= $db->query("SELECT FOUND_ROWS()")->fetchColumn();
此方法会对我的初始查询发出跟进调用。
在仅对数据库进行一次查询并查找结果方面,方法一似乎是最“有效”的。方法2给出了允许我检索一组结果的额外好处,然后根据这些结果的计数选择忽略或继续。然而,方法2似乎使后续调用我认为效率较低。
对此有任何经验丰富的建议吗?
注意:在此示例中,我 ONLY 对查找结果行数更有效率感兴趣。关于每个项目的额外收益的其他FYI信息表示赞赏,但不是问题的重点。
答案 0 :(得分:2)
方法1效率更高
如果id
不是主键,则将count(id)
替换为count(*)
以获得额外的速度(可能更快,从不慢)。
如果您在name
上没有索引,请为速度添加一个索引。