1

我正在使用 Oracle 11g R2 解决以下问题,尽管 SQL Server 和其他数据库也是如此。

如果我们有一个没有 where 的主选择

F1, F2 , F3 -> 执行 -> 结果来自 DB [Q1]

从表 1 中选择 F1、F2、F3

现在更改选择并删除 F3

F1, F2 -> 执行 -> 结果来自 DB

  • 应该来自子集的缓存请评论

从表 1 中选择 F1、F2

  • 在运行上述查询时,我如何确认 oracle 从缓存中返回结果。

  • 还要考虑以下情况,

从 Table1 中选择 F1,max(F2), F3 ( Super Set)

从 Table1 中选择 F1、F3(不完全是子集,但至少看起来如此。)

现在,如果有一些聚合应用,例如 Sum(F1), Max(F2) ,那么 oracle 如何决定此类查询的子集将来自缓存。

我想创建一个系统,例如 Windows 应用程序,它将获取的数据存储在磁盘上,如果缓存键通过某种机制匹配,系统从缓存中获取结果以用于后续查询,而不是在数据库上执行。如何找到选择子集以提高性能的最佳方法?

谢谢,

4

1 回答 1

0

我认为您对 oracle 缓冲区缓存的工作方式有一些误解。这是一个内部决定,哪些数据缓存在缓冲区缓存中,哪些不缓存。是否使用缓冲区缓存中的信息取决于与查询关联的 scn(检查一致性读取机制是如何工作的)。此信息也不会作为查询结果的一部分返回。可以借助 V$ 查询来查询当前缓存在缓冲区缓存中的块。

全表扫描通常不会缓存或仅缓存很短的一段时间。

最好的方法是查看带有子查询的物化视图。

于 2013-10-26T01:44:28.650 回答