Pourquoi jdbcTemplate.batchUpdate () de Spring est-il si lent?

J'essaie de trouver le plus rapide pour faire de lot insérer.

J'ai essayé d'insérer plusieurs lots avec jdbcTemplate.mise à jour(String sql)
sql a été construite par StringBuilder et ressemble:

INSERT INTO TABLE(x, y, i) VALUES(1,2,3), (1,2,3), ... , (1,2,3)

La taille des lots a été exactement 1000. J'ai inséré près de 100 lots.
J'ai vérifié le temps à l'aide d'un Chronomètre et un découvert l'heure d'insertion:

min[38ms], avg[50ms], max[190ms] per batch

J'étais content mais j'ai voulu faire de mon mieux.

Après cela, j'ai essayé d'utiliser jdbcTemplate.batchUpdate en sorte, comme:

    jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement ps, int i) throws SQLException {
                       //...
        }
        @Override
        public int getBatchSize() {
            return 1000;
        }
    });

où sql a été ressembler

INSERT INTO TABLE(x, y, i) VALUES(1,2,3);

et j'ai été déçu! jdbcTemplate exécuté à chaque insert unique de 1000 lignes de lots dans des locaux séparés. Je loked à mysql_log et trouvé il y a un millier d'inserts.
J'ai vérifié le temps à l'aide d'un Chronomètre et un découvert l'heure d'insertion:

min[900ms], avg[1100ms], max[2000ms] par Lot

Donc, quelqu'un peut-il m'expliquer, pourquoi jdbcTemplate faire séparées insère dans cette méthode? Pourquoi la méthode est le nom de batchUpdate?
Ou peut-être que je suis à l'aide de cette méthode dans le mauvais sens?

source d'informationauteur user2602807