Oracle千万条记录插入与查询小结

最近做了个项目,实现对存在千万条记录的库表进行插入、查询操作。原以为对数据库的插入、查询是件很容易的事,可不知当数据达到

最近做了个项目,实现对存在千万条记录的库表进行插入、查询操作。原以为对数据库的插入、查询是件很容易的事,可不知当数据达到百万甚至千万条级别的时候,这一切似乎变得相当困难。几经折腾,总算完成了任务。

1、 避免使用Hibernate框架

Hibernate用起来虽然方便,但对于海量数据的操作显得力不从心。

关于插入:

试过用Hibernate一次性进行5万条左右数据的插入,若ID使用sequence方式生成,Hibernate将分5万次从数据库取得5万个sequence,构造成相应对象后,再分五万次将数据保存到数据库。花了我十分钟时间。主要的时间不是花在插入上,而是花在5万次从数据库取sequence上,弄得我相当郁闷。虽然后来把ID生成方式改成increase解决了问题,但还是对那十分钟的等待心有余悸。

关于查询:

Hibernate对数据库查询的主要思想还是面向对象的,这将使许多我们不需要查询的数据占用了大量的系统资源(包括数据库资源和本地资源)。由于对Hibernate的偏爱,本着不抛弃、不放弃的作风,做了包括配SQL,改进SQL等等的相当多的尝试,可都以失败告终,不得不忍痛割爱了。

2、 写查询语句时,要把查询的字段一一列出

查询时不要使用类似select * from x_table的语句,要尽量使用select id,name from x_table,以避免查询出不需要的数据浪费资源。对于海量数据而言,一个字段所占用的资源和查询时间是相当可观的。

3、 减少不必要的查询条件

当我们在做查询时,常常是前台提交一个查询表单到后台,后台解析这个表单,而后进行查询操作。在我们解析表单时,为了方便起见,常常喜欢将一些不需要查询的条件用永真的条件来代替(如: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秒。

4、 避免在查询时使用表连接

在做海量数据查询时,应尽量避免表连接(特别是左、右连接),万不得已要进行表连接时,被连接的另一张表数据量一定不能太大,若连接的另一张表也是数万条的话,那估计可以考虑重新设计库表了,因为那需要等待的时间决不是正常用户所能忍受的。

5、 嵌套查询时,尽可能地在第一次select就把查询范围缩到最小

在有多个select嵌套查询的时候,应尽量在最内层就把所要查询的范围缩到最小,能分页的先分页。很多时候,就是这样简单地把分页放到内层查询里,对查询效率来说能形成质的变化。

就是这些了,希望对遇到类似问题的朋友们能有所帮助!

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1962849.html

(0)
上一篇 2025年2月23日 05:56:45
下一篇 2025年2月23日 05:57:27

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • oracle截取字符串前几位的方法

    oracle截取字符串前几位的方法 Oracle提前某数据的前几位用substr函数。 如test表中数据如下: 现要提取dept字段中的前两位,可用如下语句: select id,name,substr(dept,1,2) from te…

    2025年2月23日
    100
  • oracle中exists有什么用法

    exists后面接的是一个子查询 以下图两个表为示例,来演示 a表中的id与b表中的aid相关联 exists的作用是检查子查询的结果是否为真,如果子查询为true则执行外面的SQL语句。 exists不返回数据只返回true 或false…

    2025年2月23日 数据库
    100
  • 数据库如何设置主键

    数据库如何设置主键? SQL 设置主键的方法 打开【SQL Server Management Studio】管理工具,连接数据库 【新建表时设置主键】- 打开新建表界面 1)展开要新建表的数据库 2)右键【表】菜单,依次选择【新建】-&g…

    2025年2月23日 数据库
    100
  • 查看表结构的sql语句是什么

    查看表结构的sql语句的方法是: Oracle查看表结构1.命令窗口:desc 表名2.sql窗口:select * from user_tab_columns where table_name=‘大写表名’; MySQL查看表结构 1.查…

    2025年2月23日
    100
  • 数据库基本操作语句有哪些?

    数据库基本操作语句有哪些? 数据库基本操作语句有: 1 关于数据库的基本操作 SHOW DATABASES;  //查询数据库SHOW CREATE DATABASE score; //查询数据库的结构CREATE DATABASE sco…

    2025年2月23日
    100
  • 数据库的常用数据类型有哪些?

    数据库的常用数据类型有哪些? 一、 整数数据类型:整数数据类型是最常用的数据类型之一。   1、INT (INTEGER) INT (或INTEGER)数据类型存储从-2的31次方 (-2 ,147 ,483 ,648) 到2的31次方-1…

    2025年2月23日
    100
  • 数据库update用法详解

    数据库update用法详解 Update是一个数据库SQL语法用语,用途是更新表中原有数据,单独使用时使用where匹配字段。 语法为:UPDATE 表名称 SET 列名dao称 = 新值 WHERE 列名称 = 某值 例如:Update …

    2025年2月23日
    100
  • 要保证数据库的数据独立性需要修改的是什么?

    要保证数据库的数据独立性需要修改的是什么? 要保证数据库的数据独立性需要修改的是模式与内模式的映射。  DBMS提供了两层映像:外模式/模式映像和模式/内模式映像。外模式到模式的映像,保证了数据的逻辑独立性,从模式到内模式的映像,保证了数据…

    2025年2月23日
    100
  • 数据库读写分离是什么意思

    数据库读写分离的意思是为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。  读写分离为了确保数据库产品的稳定性,很多数据库拥有双机热备…

    2025年2月23日
    100
  • 数据库的关系运算包括哪些?

    数据库的关系运算包括:1、选择运算,从一个关系R中选择出满足给定条件的所有元组;2、投影运算,从一个关系R所有属性中选择某些指定属性;3、连接运算,是从两个关系的广义笛卡尔积中选取属性间满足一定条件的元组形成一个新关系。 数据库的关系运算包…

    2025年2月23日
    100

发表回复

登录后才能评论