光标是否将SELECT结果记录集存储在内存中?

时间:2012-08-26 15:07:57

标签: oracle caching plsql cursor

从一本书中,我已经阅读了

  

每当执行SQL语句时,Oracle都会打开一个区域   解析和执行命令的内存。这个区域是   叫光标。

它适用于显式和隐式游标。但是我对另一件事感到好奇 - 游标是否可以被视为Oracle返回最终记录集并将其用作获取记录的源的中间位置(在内存中)?

2 个答案:

答案 0 :(得分:4)

Oracle将从磁盘检索到的记录存储在称为DB Buffer Cache的已分配内存区域中。但这些是记录的,然后进行过滤以准备最终结果集。同一个表上的任何其他查询都可以使用这些缓存的记录而不是转到磁盘。 “概念指南”中有关Oracle内存架构的更多内容。 Read it here.

现在你所谈论的内容略有不同。 Oracle +可以+缓存单个结果集。至少它可以自11g以来,并且仅在企业版中。显然,只为经常运行且结果不会快速过时的查询缓存集合才有意义。数据库无法解决这个问题,这就是我们必须告诉它缓存哪些结果集的原因。 Find out more

答案 1 :(得分:3)

游标是指向从查询返回的中间数据集的指针。它包含用于生成和访问结果的状态信息。来自Concepts Doc

  

游标是特定私有SQL区域的名称或句柄。如图所示   在图14-5中,您可以将游标视为客户端上的指针   并且作为服务器端的状态。

查询的结果是result set,并由光标指向。它存储在临时位置,可以存储在内存中,也可以存储在磁盘上。来自concepts doc

  

临时表空间仅包含持续时间的架构对象   会议。本地管理的临时表空间具有临时性   文件(临时文件),它们是用于存储数据的特殊文件   哈希,排序和其他操作。临时文件还存储结果集   内存中存在空间不足时的数据。