oracle游标底层的查询机制问题,各位大哥帮帮忙!

头铁哥 2011-04-21 09:34:46
open一个游标后,游标底层是如何运作的?
我举例说明吧:
cursor cu is select coa from tba
tba是一个有上亿条记录的大表,我写了一个过程来做测试,根据我的测试,我感觉(因为我用create table as select coa from tba把该表的数据导入另一个表中时,语句占用的系统资源要大得多)oracle并不是等查询执行完了以后,把查询结果全部保存在内存中,才开始使用游标,而是一有中标记录就返回给游标处理。
cursor cu is select distinct coa from tba
这个游标经过我的测试,我感觉(因为在游标open以后,select distinct coa from tba语句占用了较大的系统资源)游标是等查询全部完成后,把所有数据保存到内存中,才开始使用游标遍历数据。
我的问题是,游标到底是查询到一条数据就取一条呢,还是等查询执行完毕所有数据放入内存以后才开始取数据。
如果我有一个非常耗时的SQL查询,想使用一个中间表保存其查询结果,使用create table as语句对系统资源占用小,还是使用游标一条条insert对系统资源占用小。
PS:我这里主要关心的是系统资源占用问题,可以牺牲查询速度来尽量降低资源占用,机器差没办法,呵呵。
...全文
109 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
2楼要道理,不过我也不清楚
304的的哥 2011-04-21
  • 打赏
  • 举报
回复
边查询边取数据,边写日志。
假设你是oracle的设计人员,你不会这么做吗?
等查询完了,再取数据到内存中,那不会很浪费时间吗?
头铁哥 2011-04-21
  • 打赏
  • 举报
回复
BOBO12082119,作为设计人员的话,我当然会这么设计。只是我想了解oracle真实的情况是怎么样。
我们在开发的时候,也会在系统功能和开发周期上做出折中。呵呵。

另外,对于一个比较费时的SQL查询,我想把它的系统资源占用降到最低,除了使用游标,边取数据边处理以外,还有其他的方法么?

17,086

社区成员

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

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