我所有的站点都是使用PDO在php和mysql堆栈上构建的。我很清楚找出一个特定查询可以返回多少行的各种方法,但我不确定如何找出哪个更有效。
SQL中的方法1-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();

此方法对我的初始查询发出后续调用。
方法1在只对数据库进行一次查询并查找结果方面似乎是最“有效的”。方法2提供了额外的好处,允许我检索一组结果,然后根据这些结果的计数选择忽略或继续。然而,方法2似乎会进行后续调用,我认为这样做效率较低。
对此有什么老一套的建议吗?
注意:在这个例子中,我只关心什么更有效地找到结果行的数量。关于每一项附加福利的其他信息值得赞赏,但不是问题的重点。

最佳答案

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

10-07 19:38
查看更多