我所有的站点都是使用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
上的索引,请添加一个以提高速度。