为啥 rewriteBatchedStatements 对于 mysql connector/j 默认为 false?

Posted

技术标签:

【中文标题】为啥 rewriteBatchedStatements 对于 mysql connector/j 默认为 false?【英文标题】:why does rewriteBatchedStatements default to false for mysql connector/j?为什么 rewriteBatchedStatements 对于 mysql connector/j 默认为 false? 【发布时间】:2018-06-14 11:09:21 【问题描述】:

mysql jdbc驱动has a property called rewriteBatchedStatements,当设置为true时可以improve batch inserts significantly,但必须显式打开。

我现在不得不为多个项目执行此操作,但找不到任何必须手动打开此功能的充分理由。

为什么这不是默认设置?

【问题讨论】:

这应该是你应该在 MySQL 的票中问的问题,但如果我不得不猜测,也许有些版本不支持它,或者它改变了语句的某些语义,或者它有一个隐藏成本,或者可能不符合批处理执行的一些 JDBC 要求。 【参考方案1】:

连接属性 rewriteBatchedStatements 提供了不符合 JDBC 的功能。并非所有语句都可以重写,并且可能会产生意想不到的结果。特别是在处理错误和返回更新计数方面。

另请注意,rewriteBatchedStatements 可以修改原始 SQL 字符串,而不仅仅是简单的查询串联,这在许多情况下是不期望或不可取的。

由于这些原因以及许多其他原因,此属性默认为 false。

【讨论】:

以上是关于为啥 rewriteBatchedStatements 对于 mysql connector/j 默认为 false?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?