.NET MySqlTransactions 是不是在本地进行批处理/缓冲?
Posted
技术标签:
【中文标题】.NET MySqlTransactions 是不是在本地进行批处理/缓冲?【英文标题】:Are .NET MySqlTransactions batched/buffered locally?.NET MySqlTransactions 是否在本地进行批处理/缓冲? 【发布时间】:2013-03-19 00:40:03 【问题描述】:假设您有一百万行要插入到远程数据库中。
不费吹灰之力,您已执行以下操作来提高性能:
-
重用单个 mysql 连接
创建一个准备好的
MySqlCommand
,您将在所有插入中重复使用它
使用MySqlTransaction
防止在每次插入后自动提交,并且仅在完成批处理后调用transaction.Commit()
。
问题很简单:MySQL Connector.NET 在这些情况下是否会自动执行事务批处理,还是应该将多行单独连接到一个 INSERT INTO foo(bar) VALUES (..), (..), (..), (..), ...;
并在事务中执行多个?
什么时候改用MySqlBulkLoader
是个好主意?
【问题讨论】:
我不知道这一点,但我不认为这种行为存在于 MySql 连接器中,因为人们不希望它存在。尽管有道理,但这并不是大多数开发人员在多次调用 command.ExecuteNonQuery 时所想的。不过,这是个好问题! @tucaz 合理的逻辑,很好的推理。如果我是编写适配器的人,我会实现它,但这只是我。我知道它是开源的,我可能应该去下载它自己看看...... grumble 【参考方案1】:回答:不,他们不是。即使在使用编译语句时,每次添加参数时,数据都会通过网络发送,然后在执行时进行更多的远程通信。
【讨论】:
以上是关于.NET MySqlTransactions 是不是在本地进行批处理/缓冲?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Dlib.Net(FaceRecognition.Net) 检测人脸是不是倒置