oracle查询效率:一次查询100万条记录 VS 100万次查询,每次查一条记录

amo1101 2011-03-16 11:13:04
请教各位大侠:

利用OCI接口,在海量的数据里(例如3000万条记录),查询100万条记录,采用两种方法:

1、一次查询出100万条记录
2、一次查询一条记录,连续查询100万次

以上两种方式的效率相差有多大,主要是哪个地方消耗了性能?

我认为第二种方式的效率会比较低,如何提高这种方式的查询性能呢?

请各位高手不啬赐教哦!
...全文
2151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzr2004 2011-03-22
  • 打赏
  • 举报
回复
第一种方法要求客户端的内在较大,并且在从服务器导出到前端时,占用服务器内在较多;
第二种方法查询速度整体感觉会比第一种差,主要差在,每次都会从服务器到客户端传数据,但对机器性能影响不大
amo1101 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zengjc 的回复:]
1. 从技术角度来看,
如果是oltp的系统,你可以通过走索引的方式来查询,而你又要Fetch到其他接口,那么合适的分批可以提高性能,比如1万条一批。
如果是olap的系统,可以通过增大并发,use_hash方式来查询,一次性的查询并传输。
查询是一个问题,但对接收数据的系统影响更大。一般来说,分批的接收数据并处理适用的范围广一点,但如果是olap系统的话,一次处理100万数据倒……
[/Quote]

之所以要这样做,是因为要实现一个数据导出系统,根据一个主键列表,从oralce数据库中获取由主键关联起来的数据(可能存在与多张数据表中)。
zengjc 2011-03-18
  • 打赏
  • 举报
回复
1. 从技术角度来看,
如果是oltp的系统,你可以通过走索引的方式来查询,而你又要Fetch到其他接口,那么合适的分批可以提高性能,比如1万条一批。
如果是olap的系统,可以通过增大并发,use_hash方式来查询,一次性的查询并传输。
查询是一个问题,但对接收数据的系统影响更大。一般来说,分批的接收数据并处理适用的范围广一点,但如果是olap系统的话,一次处理100万数据倒会快点。
2. 从需求看,还需要LZ讲清楚为啥要做这个事情,是否可以通过其他的方式来达到目的,而不是仅仅考虑是否能完成100万数据的查询和处理。
yoyoapple9 2011-03-18
  • 打赏
  • 举报
回复
肯定第一种查询快了,但是一次查询100W条查询,然后导出,太恐怖了吧。
可以按表里面一个索引字段,进行分段查询。
比如说创建日期,按年度导出
changhe325 2011-03-17
  • 打赏
  • 举报
回复
有没有折中的方法。比如一次1000或10000。。
amo1101 2011-03-16
  • 打赏
  • 举报
回复
补充说明一下,查询的时候会进行bind,查询之后,fetch到应用程序中。

现在需要采用第二种方式,但担心数据量很大的时候,性能会很低,所以想咨询一下,改如何进行调优?
ilovemk 2011-03-16
  • 打赏
  • 举报
回复
加快海量查询的方法无非就是索引和分区两种,不过最重要的还是要测试。
amo1101 2011-03-16
  • 打赏
  • 举报
回复
是导出的,会Fetch过来
wffffc 2011-03-16
  • 打赏
  • 举报
回复
一次查100w是导出用吗?不然的话就用分页查询吧,没有人会看完100w条数据

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧