PDO / PHP / MySQL 中的性能:事务与直接执行

     2023-02-24     207

关键词:

【中文标题】PDO / PHP / MySQL 中的性能:事务与直接执行【英文标题】:Performance in PDO / PHP / MySQL: transaction versus direct execution 【发布时间】:2010-11-27 18:52:58 【问题描述】:

我正在循环多个值(例如 1 到 100)并在循环内执行准备好的语句。

与在循环内直接执行相比,使用事务(在循环结束后提交)是否有优势?

这些值不相互依赖,因此从这个角度来看,不需要进行事务。

【问题讨论】:

【参考方案1】:

如果您的查询是 INSERT,则 MySQL 手册的页面 7.2.19. Speed of INSERT Statements 会提供两个有趣的信息,具体取决于您是否使用事务引擎:

使用非事务引擎时:

加快 INSERT 操作 用多个语句执行 非事务性表,锁定您的 表格。

这有利于性能,因为 索引缓冲区仅刷新到磁盘 一次,在所有 INSERT 语句都有 完全的。通常情况下,会有 许多索引缓冲区刷新,因为有 插入语句。显式锁定 如果可以的话,不需要声明 使用单个 INSERT 插入所有行。

并且,使用事务引擎:

为了获得更快的插入 事务表,您应该使用 开始交易并提交 锁表。

所以我猜测使用事务可能是一个好主意——但我想这可能取决于您的服务器上的负载,以及是否有多个用途同时使用同一个表,以及所有这些......

我链接的页面上有更多信息,所以不要犹豫,阅读它;-)

而且,如果你在做update statements:

获得快速更新的另一种方法是 延迟更新,然后进行多次更新 之后连续。执行多个 一起更新比 如果你锁定了,一次做一个 表。

所以,我猜与插入相同。

顺便说一句:可以肯定的是,您可以尝试这两种解决方案,例如在 PHP 端使用microtime 对它们进行基准测试;-)

【讨论】:

非常感谢您提供的信息,我想我只需要尝试和基准测试。 我想是的 ^^ 让我们知道结果 ;-) 它可能会让其他人感兴趣!而且,顺便说一句:另一种解决方案是使用一个插入查询同时执行多个插入,从而减少查询的总数——编码有点困难,但我已经看到了很大的改进,因为这意味着更少从一台服务器到另一台服务器的调用。 是的,减少查询的数量将是最好的解决方案,但就像我对 James Black 提到的那样,我从未尝试过使用 INSERT ON DUPLICATE KEY UPDATE,甚至不知道它是否有可能。【参考方案2】:

为了更快地完成所有插入,您可以一次完成所有插入,或者将它们组合在一起,一次可能 5 或 10 个,就好像一个插入失败,整个批次都会失败。

http://www.desilva.biz/mysql/insert.html

交易会拖慢你的速度,所以如果你不需要它就不要使用它。

即使您进行了批量插入,准备好的语句也是一个不错的选择,因为您不必每次都继续构建查询。

【讨论】:

我正在考虑将它们结合起来,但我从未尝试过使用 INSERT ON DUPLICATE KEY UPDATE。【参考方案3】:

当我必须实现 CSV 文件(可能很长)数据导入时,我遇到了同样的问题(我知道您可以为此使用 LOAD DATA INFILE 语法,但我必须在插入之前对我的字段进行一些处理)。

所以我对事务和一个大约 15k 行的文件进行了实验。结果是,如果我在一个唯一事务中插入所有记录,则只需几秒钟,而且它受 CPU 限制。如果我根本不使用任何事务,则需要几分钟并且它是 IO 有界的。 通过每 N 行提交一次,我得到了中间结果。

【讨论】:

使用 LOAD DATA INFILE 会更快;)

事务、存储过程和 PDO

...cedureandPDO【发布时间】:2012-09-2613:29:42【问题描述】:PHP中的单个操作必须经过以下步骤:执行编号。来自PHPPDO的mysql语句,基于大量业务逻辑。执行存储过程。从PDO执行更多MySQL语句。整个过程需要是一个单一的交易。如果MySQL... 查看详情

PHP PDO MySQL 以及它如何真正处理 MySQL 事务?

】PHPPDOMySQL以及它如何真正处理MySQL事务?【英文标题】:PHPPDOMySQLandhowdoesitreallydealwithMySQLtransactions?【发布时间】:2018-05-2808:26:29【问题描述】:我正在努力克服它,但我就是无法理解在PHP中使用PDO和MySQL进行事务处理背后的逻... 查看详情

PHP PDO - 没有活动事务

...布时间】:2017-05-1413:30:16【问题描述】:我遇到了php脚本中的事务问题。如果至少其中一个失败,我想进行多次查询并能够全部召回它们。您可以在下面找到我正在使用的脚本的一个简单示例:$tags_input=array(6,4,5);$conn=newPDO(\'mysql... 查看详情

mysql性能中的PDO

】mysql性能中的PDO【英文标题】:PDOinmysqlperformance【发布时间】:2011-01-2620:41:33【问题描述】:最近我浏览了一篇博客,注意到一些关于在mysql中使用PDO的观点,它改变了我对PDO的看法。要点是:原生预处理语句无法利用查询缓... 查看详情

关于更新事务的 PHP PDO 选择的说明

...用STARTTRANSACTION后跟SELECT...FORUPDATE语句成功锁定MySQL控制台中的一行。该行保持锁定状态,直到我在控制台中运行COMMIT命令但是,当我在PHP脚本 查看详情

php操作pdo预处理以及事务(代码片段)

阅读目录阐述准备连接查询插入更新删除事务阐述PDO为PHP访问各类数据库定义了一个轻量级一致性的接口,无论什么数据库,都可以通过一致的方法执行查询和获取数据,而不用考虑不同数据库之间的差异,大大简化了数据库操... 查看详情

PHP PDO 事务?

】PHPPDO事务?【英文标题】:PHPPDOTransactions?【发布时间】:2012-04-2617:02:12【问题描述】:我有一个注册页面,基本上我需要将数据插入4个表中。我是PDO的新手,对某些事情感到困惑。基本上,如果任何插入失败,我不希望将任... 查看详情

php中的mysqli扩展学习mysqli的事务与预处理语句(代码片段)

对于MySQLi来说,事务和预处理语句当然是它之所以能够淘汰MySQL(原始)扩展的资本。我们之前也已经学习过了PDO中关于事务和预处理语句相关的内容。所以在这里,我们就不再多讲理论方面的东西了,直接上代码来看看MySQLi中... 查看详情

php操作pdo预处理以及事务(代码片段)

阅读目录阐述准备连接查询插入更新删除事务阐述PDO为PHP访问各类数据库定义了一个轻量级一致性的接口,无论什么数据库,都可以通过一致的方法执行查询和获取数据,而不用考虑不同数据库之间的差异,大大简化了数据库操... 查看详情

PHP PDO 在事务中创建多个表

】PHPPDO在事务中创建多个表【英文标题】:PHPPDOCreatingmultipletablesinatransaction【发布时间】:2012-01-0615:16:57【问题描述】:我有以下一段PHP代码,它创建三个数据库表,然后尝试回滚事务。$dbh=new\\PDO("mysql:host=localhost;dbname=dbname",\'u... 查看详情

php中使用pdo操作事务的一些小测试(代码片段)

关于事务的问题,我们就不多解释了,以后在学习MySQL的相关内容时再深入的了解。今天我们主要是对PDO中操作事务的一些小测试,或许能发现一些比较好玩的内容。在MyISAM上使用事务会怎么样?首先,相信只要是学过一点点的M... 查看详情

MySQL 性能不佳 INSERT 或 PHP PDO

】MySQL性能不佳INSERT或PHPPDO【英文标题】:MySQLPoorperformanceINSERTorPHPPDO【发布时间】:2016-03-1012:42:39【问题描述】:通常,当用户访问我的网站时,他平均一次“订阅”大约50个事件,我们将其保存在mapping_table中,它将许多用户链... 查看详情

PDO 事务函数与 MySQL 事务语句?

】PDO事务函数与MySQL事务语句?【英文标题】:PDOtransactionfunctionsvsMySQLtransactionstatements?【发布时间】:2015-02-1201:37:07【问题描述】:PDO提供启动、提交和回滚事务的功能:$dbh->beginTransaction();$sth=$dbh->prepare(\'...\');$sth->execute... 查看详情

php中的pdo操作学习预处理语句及事务(代码片段)

今天这篇文章,我们来简单的学习一下PDO中的预处理语句以及事务的使用,它们都是在PDO对象下的操作,而且并不复杂,简单的应用都能很容易地实现。只不过大部分情况下,大家都在使用框架,手写的机会非常少。预处理语句... 查看详情

PHP PDO 事务自动回滚

...自动回滚。PDO是否也这样做。如果一个有查询的方法在PDO中的begin和commit之 查看详情

父 - 事务下 PHP PDO SQLite 中的子表 - 没有错误,但它不起作用

】父-事务下PHPPDOSQLite中的子表-没有错误,但它不起作用【英文标题】:Parent-childtableinPHPPDOSQLiteundertransaction-Noerrorbutitdoesn\'twork【发布时间】:2022-01-2203:30:48【问题描述】:早上好,我在下面编写了代码,它在事务下使用PDO和SQLi... 查看详情

pdo类基本应用二(代码片段)

思考:在MySql中,有一种事务功能,能够帮助实现哪些需要多个步骤操作,然后一次性完成的,那么PDO中是如何实现的呢?引入:其实,事务操作本质上是一种SQL操作,也就是说利用前面所说的写操作(事务都是写操作),就可以... 查看详情

php中的Mysqlnd、PDO和PDO_Mysql扩展有啥区别?

】php中的Mysqlnd、PDO和PDO_Mysql扩展有啥区别?【英文标题】:WhatisthedifferencebetweenMysqlnd,PDOandPDO_Mysqlextensionsinphp?php中的Mysqlnd、PDO和PDO_Mysql扩展有什么区别?【发布时间】:2017-06-0808:02:08【问题描述】:它们看起来是一样的,但又... 查看详情