Spring 如何将数千条记录插入数据库

Spring 如何将数千条记录插入数据库,spring,hibernate,Spring,Hibernate,我想在数据库中插入10.000条记录,但这几乎需要2分钟。如何提高插入速度?我正在使用批插入,但我认为它并没有将速度提高太多(可能是3秒或4秒)。有什么想法吗 我的保存功能 for (int i = 0; i < userList.size(); i++) { getCurrentSession().save(userList.get(i)); if (i % 50 == 0) { getCurrentSession().flush(

我想在数据库中插入10.000条记录,但这几乎需要2分钟。如何提高插入速度?我正在使用批插入,但我认为它并没有将速度提高太多(可能是3秒或4秒)。有什么想法吗

我的保存功能

for (int i = 0; i < userList.size(); i++) {
        getCurrentSession().save(userList.get(i));
        if (i % 50 == 0) {
            getCurrentSession().flush();
            getCurrentSession().clear();
        }
    }

你可能很难加快速度。每秒插入60个项目并不快,另一方面也不是非常慢。如果要加快速度,可能需要使用不同的方法(批量加载、删除约束等等)。您测试过纯JDBC的速度有多快吗?您需要知道要调整什么,并更好地确保Hibernate是瓶颈。您使用的数据库是什么?@PavelHolal我编辑了我的问题。打开调试日志记录,然后查看Hibernate执行的SQL语句。Hibernate可能试图将数据插入其他一些相关的表中。此外,批插入期间的任何读取都会否定批处理的任何好处。@Olaf日志中只有数千条insert语句。db中没有其他表。@hellzone:您对数据库的实验自由度有多大?我会尝试禁用pk_注册用户的任何外键,看看插入是否更快。如果他们这样做了,除了调整数据库模式或选择另一个dbms之外,您就无能为力了。另外,根据我使用Hibernate加载大量数据的经验,200-500的批处理性能最好。
<prop key="hibernate.jdbc.batch_size">50</prop>
id character varying(50) NOT NULL,
name character varying(200) NOT NULL,
register_time timestamp with time zone NOT NULL,
alias character varying(200),
title character varying(200),
type character varying(50),
CONSTRAINT pk_registered_user PRIMARY KEY (id)