我想缓存 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
现在我想为此视图显式设置 的缓存过期时间。如果我理解正确,过期将应用于全局缓存。
是否可以设置每个查询的过期时间?
结果集缓存将查询的结果集存储在内存中。任何返回此结果集(或其子集)的查询都会命中缓存而不是数据库。缓存的生命周期是从第一次执行源查询到通过 DML 更改基础表为止。这使得/*+ RESULT_CACHE */
提示非常适合执行成本高昂(或执行非常频繁)的查询,以及从数据不经常更改的表中进行选择的查询。
没有任何机制可以使结果集缓存失效:数据库以无形的方式为我们管理它。但是,如果您真的想定期使缓存失效(您的数据库性能太好或其他什么),也许您可以安排一个作业来对视图所依赖的表之一执行无意义的更新:
update Contacts c
set c.user_id = c.user_id + 0