【问题标题】:executing queries together to gain efficiency一起执行查询以提高效率
【发布时间】:2012-06-01 16:40:06
【问题描述】:

目前我正在使用准备好的语句对数据库执行查询或更新。虽然是预编译的(因此速度很快),但我认为如果可以有这样的安排会更有效率:

场景:

假设我必须在数据库表中插入 100 行。我使用准备语句,因此我准备了一条语句并将其发送到数据库以执行。所以每次查询的形式是:

insert into user values(....);

现在当我有一个表单查询时考虑这种情况

insert into user values (...), (...), ....,(...);

这样我们可以最小化表访问并一次性执行查询。

有什么方法可以使用准备好的语句或这样的安排来执行此操作,我们可以指示数据库一起执行接下来的 100 次更新。顺便说一句,我目前正在研究 mysql

【问题讨论】:

  • @AmanDeepGautem 什么是表引擎?,如果您正在使用 innodb,您可以在开始插入之前设置 autocommit=0,完成后只需执行“commit;”
  • 是的引擎是innodb。看起来不错,会试一试。但是他们没有直接的方式来支持它。 java有没有办法支持这种形式的preparedstatement??

标签: mysql database jdbc


【解决方案1】:

使用 VALUES 语法的 INSERT 语句可以插入多行。至 这样做,包括多个列值列表,每个包含在 括号并用逗号分隔。示例:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

试试类似的东西

st = con.createStatement();
  st.addBatch("INSERT INTO tbl_name VALUES(1,2,3)");
  st.addBatch("INSERT INTO tbl_name VALUES(4,5,6)");
  st.addBatch("INSERT INTO tbl_name VALUES(7,8,9)");
  st.executeBatch();

【讨论】:

  • 是的,但此语句未预编译。这是这种方法的缺点。
  • addBatch 和 executeBatch 为您提供了执行批量插入的机制
  • 您应该使用 PreparedStatement 和 executeBatch() 来避免一遍又一遍地重复相同的 SQL 文字。
  • 我已经用上述评论的插图编辑了答案。
【解决方案2】:

有什么理由不将其作为bulk insert 操作?

可能有更好的方法,但我只是将“文件”写入 /dev/shm,然后在 LOAD DATA INFILE 语句中引用,因此永远不会在客户端计算机上敲击磁盘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2015-07-20
    • 2021-09-22
    • 1970-01-01
    • 2019-03-30
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多