从Hibernate / MySQL获取数据性能

时间:2013-10-17 12:08:06

标签: mysql hibernate

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

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

我的想法:我喜欢sql VIEW 来提取所有这些连接,排序,分组的数据。但是sql VIEW就像一个普通的select语句,每次访问时都会执行。是否有任何实时结果集作为表格,我可以在选择*从ONE_LIVE_RESULT_SET条件中获取数据。  有没有像LIVE_RESULT_SET IN sql world这样的概念?任何评论。

3 个答案:

答案 0 :(得分:1)

使用物化视图

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

  

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

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

  

创建物化视图MV_MY_VIEW刷新快速开始与SYSDATE
  NEXT SYSDATE + 1        AS SELECT * FROM;

此致

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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