我有我所有的网站建立在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
的索引,请添加一个以提高速度。