4

从一本书,我读过

每当您执行 SQL 语句时,Oracle 都会打开一个内存区域,在其中解析和执行命令。该区域称为光标。

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

4

2 回答 2

4

Oracle 将从磁盘检索到的记录存储在一个称为 DB 缓冲区高速缓存的已分配内存区域中。但这些是记录,然后过滤以准备最终结果集。同一张表上的任何其他查询都可以使用这些缓存记录,而不是进入磁盘。概念指南中有更多关于 Oracle 内存体系结构的内容。 在这里阅读。

现在你所说的略有不同。Oracle +can+ 缓存单个结果集。至少它可以从 11g 开始,并且仅在企业版中。显然,只有为频繁运行且结果不会很快过时的查询缓存集才有意义。数据库无法弄清楚这一点,这就是为什么我们必须告诉它要缓存哪些结果集。 了解更多

于 2012-08-26T15:40:07.393 回答
4

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

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

查询的结果是 aresult set并且由游标指向。它存储在临时位置,无论是在内存中还是在磁盘上。从概念文档

临时表空间仅在会话期间包含模式对象。本地管理的临时表空间有临时文件(temp files),这些临时文件是特殊文件,旨在存储散列、排序和其他操作中的数据。当内存空间不足时,临时文件也会存储结果集数据。

于 2012-08-26T15:49:59.123 回答