【发布时间】:2012-08-26 15:07:57
【问题描述】:
我读过一本书
每当您执行 SQL 语句时,Oracle 都会打开一个区域 解析和执行命令的内存。这个区域是 称为游标。
它适用于显式和隐式游标。但我对另一件事感到好奇——游标是否可以被视为 Oracle 返回最终记录集并将其用作获取记录的源的中间位置(在内存中)?
【问题讨论】:
标签: oracle caching plsql database-cursor
我读过一本书
每当您执行 SQL 语句时,Oracle 都会打开一个区域 解析和执行命令的内存。这个区域是 称为游标。
它适用于显式和隐式游标。但我对另一件事感到好奇——游标是否可以被视为 Oracle 返回最终记录集并将其用作获取记录的源的中间位置(在内存中)?
【问题讨论】:
标签: oracle caching plsql database-cursor
游标是指向从查询返回的中间数据集的指针。它包含用于生成和访问结果的状态信息。来自Concepts Doc:
游标是特定私有 SQL 区域的名称或句柄。如图所示 在图 14-5 中,您可以将游标视为客户端上的指针 端并作为服务器端的状态。
查询的结果是result set,并由光标指向。它存储在临时位置,无论是在内存中还是在磁盘上。来自concepts doc:
临时表空间仅在持续时间内包含模式对象 的一个会话。本地管理的临时表空间有临时的 文件(临时文件),它们是设计用于存储数据的特殊文件 哈希、排序和其他操作。临时文件还存储结果集 内存空间不足时的数据。
【讨论】:
Oracle 将从磁盘检索到的记录存储在一个称为 DB 缓冲区高速缓存的已分配内存区域中。但这些是块的记录,然后被过滤以准备最终结果集。同一张表上的任何其他查询都可以使用这些缓存记录,而不是进入磁盘。概念指南中有更多关于 Oracle 内存体系结构的内容。 Read it here.
现在你所说的略有不同。 Oracle +can+ 缓存单个结果集。至少它可以从 11g 开始,并且仅在企业版中。显然,只有为频繁运行且结果不会很快过时的查询缓存集才有意义。数据库无法弄清楚这一点,这就是为什么我们必须告诉它要缓存哪些结果集。 Find out more。
【讨论】: