0

我有多个表,我必须加入,子查询,分页,分组,排序。牢记休眠限制,有时需要本地 SQL,在此期间休眠缓存是无用的。此外,数据存储在休眠二级缓存中不是自动的,因为它仅在访问 DB 时存储。所以第一次二级缓存是空的。

我的问题是我使用本机 sql 来获取具有多个连接和分组、排序的数据,最终导致性能问题。

我的想法:我喜欢 sql VIEW 用所有这些连接、排序、分组来提取数据。但是 sql VIEW 就像一个普通的 select 语句,每次访问时都会执行。是否有任何实时结果集作为表,我可以说 fetch data as select * from ONE_LIVE_RESULT_SET where condition。有没有像 LIVE_RESULT_SET IN sql world 的概念?任何意见。

4

3 回答 3

1

使用物化视图

摘自维基百科:http ://en.wikipedia.org/wiki/Materialized_view

物化视图是包含查询结果的数据库对象。例如,它可以是位于远程的数据的本地副本,或者可以是表或连接结果的行和/或列的子集,或者可以是基于表数据聚合的摘要。基于远程表存储数据的物化视图也称为快照。快照可以重新定义为物化视图。

在 Oracle 中创建物化视图的示例语法:

CREATE MATERIALIZED VIEW MV_MY_VIEW REFRESH FAST START WITH SYSDATE
NEXT SYSDATE + 1 AS SELECT * FROM ;

问候

于 2013-10-17T14:06:57.723 回答
0

任何休眠专家!!!HIBERNATE 是否在多个连接、复杂连接上持久保存数据?我已经看到hibernate 持久化二级缓存 session.get(id ),但我不确定hql 或本机 sql 是否具有 multiple/complex join。是否可以从休眠二级缓存中获取多个/复合连接

于 2013-10-18T10:24:31.243 回答
0

但是这个 MATERIALIZED VIEW 不是实时数据(与表同步),但为了使其成为实时数据,它必须是 REFRESH。这里的问题将是何时刷新或在再次刷新期间必须等待。频繁的数据更改也是另一个受到影响的用例。有什么方法可以对特定行进行刷新吗?

于 2013-10-18T05:26:17.047 回答