【发布时间】:2014-12-18 08:41:46
【问题描述】:
我创建了一个向 MySql 数据库插入数百万个值的程序。 我读到了批量插入,它将优化我的程序并使其更快,但是当我尝试这样做时,它以相同的方式工作。 我每次将 500 个值都保存在一个列表中,而不是将每个值插入数据库,然后将它们插入一个大循环中,如下所示:
for(int i=0;i<500;i++)
{
insertData(list.get(i));
}
然后我删除列表中的所有值并再次开始收集 500 个值。
它不应该更好地工作吗?
我的插入代码是:
public void insertToNameTable(String id,String name) throws SQLException
{
PreparedStatement ps=null;
ps= conn.prepareStatement("INSERT INTO NameTable values(?,?,?)",user.getId(),user.getName());
ps.setString(1,id);
ps.setString(2,name);
ps.setBoolean(3,false);
ps.executeUpdate();
}
我有一些问题:
1.为什么我批量插入时运行速度不快?
2.每次我应该输入多少个值才能更快?(500,1000,10000)一起输入的值越多越好?
3. 将值插入数据库的方式是最好的方式吗?
【问题讨论】:
-
sql优化比你聪明。你这个微不足道的例子不会欺骗优化器。
-
@ScaryWombat 那么我应该如何以最佳方式将值插入数据库?
-
发布您的批量插入程序。另外我的 insertData(list.get(i)) 你是说 list.get(i) 返回一个包含 500 个值的列表吗?那么如何插入这 500 个值。您是否使用类似:“插入表(x,y,z)值(1,2,3),(3,4,5),....”
-
@danb list.get(i) 返回给我一个值。列表大小为 500。在我的程序中,我每次在列表中收集 500 个值,而不是在插入后插入,然后将它们一个接一个地插入。我明白这不是正确的方法,但我应该怎么做。我应该每次插入多少个值来优化它?
-
但你也做同样的事情吗?您创建 500 个不同的插入语句。这不是批量插入
标签: java mysql database sql-insert batch-insert