设置缓存视图时的到期时间

时间:2017-01-03 08:39:12

标签: oracle caching oracle12c

我想从Oracle中的视图缓存结果。我的观点被宣布为:

CREATE VIEW SOME_VIEW AS
SELECT
    /*+ RESULT_CACHE */
    u.name
    c.info
FROM
    Users u
    LEFT OUT JOIN Contacts c ON c.user_id = u.id

现在我想显式设置此视图的缓存过期时间。如果我理解正确,则到期时间将应用于cache globaly

是否可以设置每个查询的到期时间?

1 个答案:

答案 0 :(得分:1)

结果集缓存将查询的结果集存储在内存中。任何返回此结果集(或其子集)的查询都将命中缓存,而不是数据库。缓存的寿命是从第一次执行源查询直到通过DML更改基础表为止。这使得/*+ RESULT_CACHE */提示非常适合执行(或执行频率很高)并且从数据不经常更改的表中选择的查询。

因此,我们没有任何机制可以使结果集缓存无效:数据库会无形地为我们管理它。但是,如果您真的想定期使缓存无效(您的数据库性能太好或其他原因),则可以安排作业对视图所依赖的表之一执行无意义的更新:

update Contacts c
set c.user_id = c.user_id + 0