Oracle千万级记录进行处理并不简单,下面就为您总结了Oracle千万级记录插入和查询的技巧,但愿对您可以有所启迪。数据库
最近作了个项目,实现对存在Oracle千万级记录的库表执行插入、查询操做。原觉得对数据库的插入、查询是件很容易的事,可不知当数据达到百万甚至千万条级别的时候,这一切彷佛变得至关困难。几经折腾,总算完成了任务。框架
一、防止运用 Hibernate框架htm
Hibernate用起来虽然方便,但对于海量数据的操做显得力不从心。对象
关于Oracle千万级记录插入:资源
试过用Hibernate一次性执行 5万条左右数据的插入,若ID运用 sequence方式生成,Hibernate将分5万次从数据库取得5万个sequence,构形成相应对象后,再分五万次将数据保存到数据库。花了我十分钟时间。主要的时间不是花在插入上,而是花在5万次从数据库取sequence上,弄得我至关郁闷。虽而后来把ID生成方式改为increase处理了疑问,但仍是对那十分钟的等待心有余悸。get
关于Oracle千万级记录查询:table
Hibernate对数据库查询的主要思想仍是面向对象的,这将使许多咱们不需要查询的数据占用了大量的系统资源(包括数据库资源和本地资源)。因为对Hibernate的偏心,本着不抛弃、不放弃的做风,作了包括配SQL,改良 SQL等等的至关多的尝试,可都以失败了结,不得不忍痛割爱了。后台
二、写查询语句时,要把查询的字段一一列出表单
查询时不要运用相似select * from x_table的语句,要尽可能运用 select id,name from x_table,以防止查询出不需要的数据浪费资源。对于海量数据而言,一个字段所占用的资源和查询时间是至关可观的。select
三、减小没必要要的查询条件
当咱们在作查询时,经常是前台提交一个查询表单到后台,后台分析这个表单,然后执行查询操做。在咱们分析表单时,为了方便起见,经常喜欢将一些不需要查询的条件用永真的条件来代替(如:select count(id) from x_table where name like ‘%’),其实这样的SQL对资源的浪费是至关可怕的。
我试过对于一样的近一千万条记录的查询来讲,运用 select count(id) from x_table 执行 表查询需要 11秒,而运用 select count(id) from x_table where name like ‘%’却花了33秒。