0

JDBC Prepared ステートメントでリモート DB を更新しています。同じコードを実行してローカル DB を更新すると数ミリ秒かかりますが、リモート DB では約 900 行に時間がかかりすぎます。すべての行を合わせたサイズは 160 KB です。リモート ホストは Hostgator で、テーブルの DB エンジンは InnoDB です。

これが私のコードです:

String insertTableSQL = "INSERT INTO abc(zzz,c,d,e,timestamp) VALUES (?,?,?,?,?)";

String delSt = "DELETE FROM abc WHERE zzz= ?";

del = connection.prepareStatement(delSt);
preparedStatement = connection.prepareStatement(insertTableSQL);
connection.setAutoCommit(false);
Iterator<DataObject> itr = updationList.iterator();
while (itr.hasNext()) {
    DataObject dO = itr.next();
    del.setString(1, dO.a + ":" + dO.b);
    for (SubObject sO : dO.getsO.values()) {
        try {
            preparedStatement.setString(1, sO.a + ":" + sO.b);
            preparedStatement.setString(2, sO.c);
            preparedStatement.setInt(3, sO.d);
            preparedStatement.setFloat(4, sO.e);
            preparedStatement.setTimestamp(5, getCurrentTimeStamp());
            preparedStatement.addBatch();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
try {
    del.execute();
    preparedStatement.executeBatch();
} catch (Exception e) {
    e.printStackTrace();
}
try {
    connection.commit();
}
...
4

1 に答える 1

0

インデックスがローカル テーブルとリモート サーバーで同じであることを確認する必要があります。削除が原因である可能性が高く、EXPLAIN SELECT * FROM abc WHERE zzz=?そこで何が起こっているかがわかります。useCompression=trueJDBC 接続文字列に追加することで、接続に圧縮を追加することができます。これにより、コマンドの送信中に 160k が少し縮小されます。

http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-configuration-properties.html

于 2012-07-15T17:47:30.053 に答える