PHP / PDO更有效的行方法?

时间:2011-09-06 22:31:51

标签: php mysql pdo

我的所有网站都建立在使用PDO的php和mysql堆栈上。我很清楚各种方法可以找出特定查询可以返回的行数,但我不知道如何找出哪个行更有效。

方法1 - SQL

中的COUNT()
$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变量返回。

方法2 - Foundrows

$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信息表示赞赏,但不是问题的重点。

1 个答案:

答案 0 :(得分:2)

方法1效率更高 如果id不是主键,则将count(id)替换为count(*)以获得额外的速度(可能更快,从不慢)
如果您在name上没有索引,请为速度添加一个索引。