Mysql DML性能

时间:2009-12-30 07:16:18

标签: mysql performance

在我的情况下,我有一个包含2,976,977条记录的Mysql表。这个表有两列索引,我在更新和插入多个客户端的记录时使用了这两列。问题是更新或插入值需要花费太多时间。有什么想法加快这个吗?

2 个答案:

答案 0 :(得分:3)

索引可能无法更快地插入和更新 - 它们可能会使它们变慢,因为索引需要更新。

答案 1 :(得分:1)

从评论中,我得到的印象是它主要执行的20000更新状态耗时太长。您是否在自动提交模式下运行更新(默认)?如果是这样,那么你可以通过以下方式提高性能:

START TRANSACTION;
...update statements go here...
COMMIT;

请注意,如果其中一个更新由于违反约束而未成功,则无法进行COMMIT。在执行COMMIT之前,您的数据不会永久存储。

在java中,您可以执行以下操作:

java.sql.Connection conn = DriverManager.getConnection(connectString, userName, passWord);
//explicit transaction by disabling autocommit.
conn.setAutocommmit(false);
java.sql.Statement stmt = conn.createStatement();

//add all your statements to the batch, f.e. in a loop
for (...) {
    stmt.addBatch(sql);
}

int results[] = stmt.executeBatch();
...check the results here...

//store results permanently in db
conn.commit();