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:我这里主要关心的是系统资源占用问题,可以牺牲查询速度来尽量降低资源占用,机器差没办法,呵呵。