我想从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。
是否可以设置每个查询的到期时间?
答案 0 :(得分:1)
结果集缓存将查询的结果集存储在内存中。任何返回此结果集(或其子集)的查询都将命中缓存,而不是数据库。缓存的寿命是从第一次执行源查询直到通过DML更改基础表为止。这使得/*+ RESULT_CACHE */
提示非常适合执行(或执行频率很高)并且从数据不经常更改的表中选择的查询。
因此,我们没有任何机制可以使结果集缓存无效:数据库会无形地为我们管理它。但是,如果您真的想定期使缓存无效(您的数据库性能太好或其他原因),则可以安排作业对视图所依赖的表之一执行无意义的更新:
update Contacts c
set c.user_id = c.user_id + 0