当前位置: 技术问答>java相关
迷惑:insert操作越来越慢?!
来源: 互联网 发布时间:2015-05-31
本文导语: 我通过SYBASE的JDBC连接数据库,从一个数据库每次SELECT 1000条数据于resultset中,然后将这1000条数据insert到另一数据库中,如此反复!发现select 1000操作越来越快,最后也就几十毫秒左右,而insert操作却越来越慢,由几...
我通过SYBASE的JDBC连接数据库,从一个数据库每次SELECT 1000条数据于resultset中,然后将这1000条数据insert到另一数据库中,如此反复!发现select 1000操作越来越快,最后也就几十毫秒左右,而insert操作却越来越慢,由几十秒到100多秒,。。。我的天,如此下去,还得了?insert操作还用的是PreparedStatement
while(rsSource.next())
{
preStmt.setString(1,rsSource.getString("one"));
preStmt.setDate(2,rsSource.getDate("two"));
preStmt.setInt(3,rsSource.getInt("year"));
preStmt.setInt(4,rsSource.getInt("month"));
preStmt.setInt(5,rsSource.getInt("day"));
..........
.....................
// preStmt.addBatch();
preStmt.executeUpdate();
connDest.commit();
iCount++;
}
我试过批量提交,也不行,还更慢!啊,搞不懂了。各位给点意见,谢谢了!
while(rsSource.next())
{
preStmt.setString(1,rsSource.getString("one"));
preStmt.setDate(2,rsSource.getDate("two"));
preStmt.setInt(3,rsSource.getInt("year"));
preStmt.setInt(4,rsSource.getInt("month"));
preStmt.setInt(5,rsSource.getInt("day"));
..........
.....................
// preStmt.addBatch();
preStmt.executeUpdate();
connDest.commit();
iCount++;
}
我试过批量提交,也不行,还更慢!啊,搞不懂了。各位给点意见,谢谢了!
|
可能是insert to的表上设置了索引,索引可以提高查询速度但导致插入速度变慢,特别是数据越来越多时。
建议
1.精简索引,取消不需要(不常用)的索引
2.如果有权限的话,在insert操作前,暂时禁用索引,insert完成后,再启用索引
建议
1.精简索引,取消不需要(不常用)的索引
2.如果有权限的话,在insert操作前,暂时禁用索引,insert完成后,再启用索引
|
我看还是索引的问题!你把索引建的小一点,尽量用短小点的CHAR,千万不要超过20位长,如果超过了索引就没什么用了!
|
不知道你的数据库是什么数据库,不过索引确实对插入数具有较大影响,尤其是你的数据表中的数据比较大的时候,像oracle数据库达到100万条的时候在索引存在的条件下已经很难差如一条数据了。
如果你的也是在数据大的时候出现这种情况的话,建议你在插入完数据之后再建立索引。这里索引不是指不重要的索引,是所有的
如果你的也是在数据大的时候出现这种情况的话,建议你在插入完数据之后再建立索引。这里索引不是指不重要的索引,是所有的
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。