Mengapa pembaruan membutuhkan waktu lama tetapi tidak dimasukkan ke dalam pembaruan batch jdbctemplate musim semi?

Saya mencoba melakukan pembaruan batch untuk 3000 catatan. Dibutuhkan sekitar 15 detik untuk menyelesaikannya, tetapi penyisipan terjadi dalam 1 detik.

Telah menyertakan rewriteBatchedStatements=true juga. Apakah saya perlu melakukan hal lain?

Di bawah ini adalah kode saya. (tidak termasuk penanganan pengecualian dan bagian jumlah/id keberhasilan dan kegagalan. Keduanya sama untuk pembaruan dan penyisipan).

Teknologi yang digunakan: spring,jdbctemplate,mysql,java,intellij idea

  result = jdbcTemplate.batchUpdate(
                //"insert into xxx(aaa,bbb,item_code) values(?,?,?)",
                        "update ignore xxx set aaa = ?, bbb= ? where item_code = ?",
                        new BatchPreparedStatementSetter() {
                    public void setValues(PreparedStatement ps,int i) throws SQLException {
                        ps.setDouble(1, Double.parseDouble(new JSONObject(jsonArray.get(i).toString()).get("aaa").toString()));
                        ps.setDouble(2, Double.parseDouble(new JSONObject(jsonArray.get(i).toString()).get("bbb").toString()));
                        ps.setString(3, new JSONObject(jsonArray.get(i).toString()).get("code").toString());
                    }

                    public int getBatchSize() {
                        return jsonArray.length();
                    }
                } );

person Explain Down Vote    schedule 06.05.2018    source sumber
comment
Apakah Anda memiliki indeks pada item_code di DB? Jika tidak, Anda dapat mencoba membuatnya.   -  person Vasan    schedule 06.05.2018
comment
@Vasan Ini adalah kolom Kunci Unik, Jadi sudah diindeks.   -  person Explain Down Vote    schedule 06.05.2018


Jawaban (1)


Sertakan juga useServerPrepStmts=false .

Pertanyaan serupa ditanyakan di sini: Kinerja penyisipan batch JDBC

Kiat peningkatan kinerja Jdbc: http://javarevisited.blogspot.in/2012/01/improve-Performance-java-database.html

person mindSet    schedule 06.05.2018