PHP/PDO更有效的行方法?

PHP/PDO更有效的行方法?,php,mysql,pdo,Php,Mysql,Pdo,我的所有网站都是使用PDO在php和mysql堆栈上构建的。我很清楚有各种方法可以确定一个特定查询可以返回多少行,但我不确定如何确定哪种方法更有效 方法1-SQL中的COUNT() 在本例中,我只对计算特定查询的结果数感兴趣。查询执行一次,结果以$counter变量返回 方法2-查找行 此方法对我的初始查询发出后续调用 就只对数据库进行一次查询并找到结果而言,方法一似乎是最“有效”的。方法2的额外好处是允许我检索一组结果,然后根据这些结果的计数选择忽略或继续。然而,方法2似乎会进行后续调用,我认

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

方法1-SQL中的COUNT() 在本例中,我只对计算特定查询的结果数感兴趣。查询执行一次,结果以$counter变量返回

方法2-查找行 此方法对我的初始查询发出后续调用

就只对数据库进行一次查询并找到结果而言,方法一似乎是最“有效”的。方法2的额外好处是允许我检索一组结果,然后根据这些结果的计数选择忽略或继续。然而,方法2似乎会进行后续调用,我认为这是效率较低的

对此有什么老练的建议吗


注意:在本例中,我只对查找结果行数的效率感兴趣。关于每种方法的附加好处的附加信息值得赞赏,但不是问题的重点。

方法1更有效。
如果
id
不是主键,则将
count(id)
替换为
count(*)
以获得更高的速度(可能更快,但决不会更慢)。

如果
name
上没有索引,请为速度添加一个索引

据我所知,COUNT(*)计算所有列的结果,而COUNT(ID)(索引列或主列)则要快得多。不是这样吗?@JM4,不,你完全错了<代码>计数(*)统计所有行,普通行和简单行<代码>计数(columnname)统计columnname的所有非空实例。后者涉及到一个额外的测试,如果
columnname
不是主键,则速度可能会较慢。m8他说,如果id不是主键,则执行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];
}
$stmt = $db->prepare('SELECT ID FROM table WHERE name = :name');
$stmt->bindParam(':name', $name);
$stmt->execute();

$counter= $db->query("SELECT FOUND_ROWS()")->fetchColumn();