当前位置: 首页 > 面试题库 >

PDO :: rowCount VS COUNT(*)

孟永望
2023-03-14
问题内容

我有一个使用PDO的查询,如果行> 1比获取数据多,则首先对行进行计数

SELECT * WHERE id=:id
$row=$SQL->rowCount();

if($row>0){
    while($data=$SQL->fetch(PDO::FETCH_ASSOC)){...

    }
}
else{echo "no result";}

要么

SELECT COUNT(*), * WHERE id=:id
$data=fetch(POD::FETCH_NUM);
$row=data[0];


if($row>0){
//fetch data
}
else{echo "no result";}

哪个会更好?

2号 问题,如果我在id上设置了索引

哪一个更好COUNT(id)COUNT(*)


问题答案:

第一个问题:

COUNT()内部,使用count ,服务器(MySQL)将以不同方式处理请求。

这样做时COUNT(),服务器(MySQL)将只分配内存来存储计数结果。

使用$row=$SQL->rowCount();服务器时(Apache /
PHP)将处理整个结果集,为所有这些结果分配内存,并将服务器置于获取模式,这涉及许多不同的细节,例如锁定。

请注意,它PDOStatement::rowCount()返回受最后一条语句影响的行数,而不是返回的行数。如果关联程序执行的最后一条SQL语句PDOStatement是一条SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并非对于所有数据库都可以保证此行为,并且便携式应用程序不应该依赖此行为。

根据我的分析,如果使用COUNT(),则该过程将分为MySQL和PHP,而如果使用$row=$SQL->rowCount();,则该过程将更多地用于PHP。

因此COUNT()在MySQL中速度更快。

第二个问题:

COUNT(*)比更好COUNT(id)

说明:

count(*)mysql中的函数经过优化以查找值的计数。使用通配符意味着它不会获取每一行。它只找到计数。因此,请count(*)尽可能使用。

资料来源:

  • PDOStatement :: rowCount
  • MySQL COUNT(*)


 类似资料:
  • pdo

    PDO Object Medoo是一个基于PDO的项目.你通过 $database->pdo, 能够使用更多的PDO方法, 预定义,事务 , 回滚 等. 更多关于 PDO 的使用, 请阅读: http://php.net/manual/en/class.pdo.php. Transaction (事务) $database->pdo->beginTransaction();$database->i

  • pdo

    PDO Object Medoo是一个基于PDO的项目.你通过 $database->pdo, 能够使用更多的PDO方法, 预定义,事务 , 回滚 等. 更多关于 PDO 的使用, 请阅读: http://php.net/manual/en/class.pdo.php. Transaction (事务) $database->pdo->beginTransaction();$database->i

  • pdo

    Raw Object Medoo可以使用原始表达式来进行复杂的或自定义的查询,尤其是在使用SQL内置函数的时候.支持占位符号,以防止注入和优化语法. Medoo::raw($query, $map) 查询列中使用可以直接在select()中做为字段查出,这时候key值将做为别名使用 $data = $database->get('account', [ 'user_name', 'use

  • 主要内容:PDO 安装,实例PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。 PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用,无法运行于之前的PHP版本。 PDO 安装 你可以通过 PHP 的 phpinfo() 函数来查看是否安装了PDO扩展。 在 Unix 系统

  • 问题内容: 这是我到目前为止阅读的内容: 由于MySQL的本机准备绕过了查询缓存,因此PDO的准备仿真在性能上更好。 MySQL的本机准备更好地提高了安全性(防止SQL注入)。 MySQL的本机准备更好地用于错误报告。 我不知道这些陈述的真实性。在选择MySQL接口时,我最大的担心是防止SQL注入。第二个问题是性能。 我的应用程序当前使用过程MySQLi(没有准备好的语句),并且大量利用了查询缓存

  • 这是我到目前为止读到的关于的内容: PDO的prepare仿真性能更好,因为MySQL的本机prepare绕过查询缓存。 MySQL的本机prepare在安全性方面更好(防止SQL注入)。 MySQL的本机prepare更适合错误报告。 我不知道这些说法有多真实了。我在选择MySQL接口时最关心的是防止SQL注入。第二个关注点是业绩。 我的应用程序目前使用过程式MySQLi(没有准备好的语句),并

  • 问题内容: 只是一个简单的问题。 在循环中使用PDO :: fetchAll()和PDO :: fetch()是否有性能差异(对于大型结果集)? 我正在获取用户定义类的对象,如果有什么不同的话。 我最初的未经教育的假设是fetchAll可能会更快,因为PDO可以在一条语句中执行多个操作,而mysql_query只能执行一条。但是,我对PDO的内部工作原理知之甚少,文档也对此一无所知,而fetchA

  • PDO 是一个数据库连接抽象类库 — 自 5.1.0 版本起内置于 PHP 当中 — 它提供了一个通用的接口来与不同的数据库进行交互。比如你可以使用相同的简单代码来连接 MySQL 或是 SQLite: <?php // PDO + MySQL $pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password'