PHP/PDO更高效的行方法


PHP/PDO more efficient method of rows?

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

方法1 - COUNT()在SQL
$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似乎进行了后续调用,我认为效率较低。

对此有什么经验丰富的建议吗?

注意:在本例中,我对只对更有效地查找结果行数感兴趣。额外的FYI信息关于每个附加的好处是赞赏的,但不是问题的重点。

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