【发布时间】:2016-06-03 08:24:46
【问题描述】:
问题是关于SQLMySQL 数据库的遗留代码。
众所周知,在执行 INSERT ... ON DUPLICATE KEY UPDATE 语句 VALUES(col_name) 函数 can be used 时,会引用来自 INSERT 部分的列值,而不是传递确切的值:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c)
我的遗留代码包含大量参数化样式的巨大插入(它们用于批量插入):
INSERT INTO table (a,b,c, <...dozens of params...>) VALUES (?,?,?,<...dozens of values...>)
ON DUPLICATE KEY UPDATE b=?, c=?, <...dozens of params...>
问题是:如果我将所有这些查询更改为使用VALUES(col_name) 函数(在UPDATE 部分),它会提高批量插入的性能吗?
我的查询是使用 jdbc 驱动程序从 java 代码执行的。所以,我猜,对于长文本值,它应该显着减少查询的大小。 MySQL它自己呢?一般来说,它真的会让我提高速度吗?
【问题讨论】:
-
是的,对于长值,您可能会获得边际收益,但这种努力几乎不值得,除非您每分钟插入大量记录
-
我确实在几分钟内插入了很多记录
-
猜猜这是值得的,因为更改不会占用您太多时间。
标签: mysql sql performance jdbc batch-insert