java用啥方法插入数据量很大但速度又快。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java用啥方法插入数据量很大但速度又快。相关的知识,希望对你有一定的参考价值。

java用什么方法可以实现上万条数据同时插入数据库,但速度又快?求指教!

理论上上万条数据同时插入一个数据库是不可能的,因为数据库进行操作时候会锁表,每个任务完成后在进行下个任务,其实所谓的并发其实也是排队按顺序执行的如果是向同一个表中插入数据的话可以
insert into table (colum1,column2...)values(data1,data2),(data2,data3),(data4,data5)......这样用一个连接插入是最快的方法追问

只能用jdbc的方式插入吗?还有没有别的技术,如果用jdbc的话,那不是还要自己配置数据库连接池!

追答

如果只是录入数据的话根本不用考虑连接池(有并发访问的时候才会用到连接池),用jdbc直接连即可

追问

就是要用多线程做!不知如何做!

追答

ok那就用用连接池,每个线程从连接池中取数据源进行操作

追问

那怎么配置一个连接池,我没有做这方面的,能给点代码吗?

参考技术A

jdbc批量插入

PreparedStatement pst = conn.prepareStatement(sql);
int count = 0;
pst.addBatch();
count ++;
if(count % 1000 == 0) 
    pst.executeBatch();

追问

如果用多线程,怎么做?

oracle sql优化技巧

数据库方面一直是自己的薄弱项,现在以本文慢慢积累总结oracle sql优化的一些技巧。

1.首先大家很容易想到的一切优化技巧--索引,索引有啥用?索引在表数据量很大时添加索引确实能加快查询速度,通过索引查询能很好地避免全表扫描。

   但应该也要注意的时这是在数据量较大的时候。同时数据较小时,反而浪费索引空间。另外,添加索引之后数据的插入,更新反而会变慢,在插入或修改记录

 时需要新建索引并排序。

   索引创建语句:

   create [unique] index xxx on A(column 1,column 2)

   关于唯一索引和普通索引这里不得不提一句 唯一索引要求字段值不能重复,而普通索引则不要求

   另外唯一索引与主键:大家都知道主键是使用来表示记录的唯一性,只能有一个字段表示,不允许为空。而唯一索引则可以在多个值唯一的字段上建,且允许为空。

2.大家显而易见避免使用select * 而用select 字段

3.避免在在添加索引的字段使用计算 例如 select * from A where num*2>6;-->优化:select * from B where num>6/2;

4.避免在添加索引的字段使用函数  例如 select * from where B where to_char(num)= ‘c‘;-->若在程序大量此类语句,建议修改索引添加函数

   修改索引字段语句:drop index xxx; create index xxx on B(to_char(num));

5.能使用>=就用 因为>=4会直接定位到4,而>3 会先定位到3 在定位到4

6.使用exist 代替 in 例如:select e.deptno from employee e where e.deptno in(select d.deptno from dept d);

  -->优化:select e.deptno from employee e where exist (select d.deptno from dept d where d.deptno = e.deptno);

7.使用Union all代替 or,num索引字段段在使用or后,将放弃索引引擎而改为全表扫描。 例如:select * from A where num=1 or num=2

  -->优化:select * from A where num = 1 Union all select * from B where num = 2;

8.在数据量很大的时候,除了使用索引也可以用表分区。分散存储,同时分散IO,加快查询。

 表分区语句

   create table A (

   AId varchar2,

    AName varchar2,

    Score  int   

  )

 partition by Score(Score) (

   partition jige values less(maxvalue) tablespace a1,

      partition bujige values less(maxvalue) tablespace a2

 )

 这里顺带提一下创建表空间语句:

 第一步:创建临时表空间

 create temporary tablespace A

 tempfile  ‘D:\oracledata\a.dbf‘

 size 50m 

 autoextend on

 next 50m maxsize 20480m

 extent management local;

第一步:创建表空间

create tablespace B logging

 datafile  ‘D:\oracledata\b.dbf‘

 size 50m 

 autoextend on

 next 50m maxsize 20480m

 extent management local;

以上是关于java用啥方法插入数据量很大但速度又快。的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 大数据量快速插入方法和语句优化

oracle sql优化技巧

MongoDB中在100万级大数据量插入的代码分享和测试分析

JAVA 用dbutils这个第三方jar 向oracle数据库插入date 类型数据的时候,要用啥类型替换掉占位符

大数据量数据,MySql批量插入时,如何不插入重复的数据?

如何向Oracle数据库表中进行大数据量的插入并提交?