我有多个表,我必须在其中连接、子查询、分页、分组、排序。考虑到 hibernate 的限制,有时需要 native SQL,而此时 hibernate 缓存是无能为力的。此外,数据存储在hibernate二级缓存中并不是自动的,因为它仅在访问数据库时才存储。所以第一次二级缓存是空的。
我的问题是我使用原生sql来获取具有多个连接和分组、排序的数据,最终导致性能问题。
我的想法:我喜欢 sql VIEW 通过所有这些连接、排序、分组来提取数据。但 sql VIEW 就像普通的 select 语句一样,每次访问时都会执行。是否有任何实时结果集作为表,我可以在其中以select * from ONE_LIVE_RESULT_SET where条件的方式获取数据。 sql世界中有没有像LIVE_RESULT_SET这样的概念?有任何意见。
最佳答案
使用物化 View
摘自维基百科:http://en.wikipedia.org/wiki/Materialized_view
A materialized view is a database object that contains the results of a query. For example, it may be a local copy of data located remotely, or may be a subset of the rows and/or columns of a table or join result, or may be a summary based on aggregations of a table's data. Materialized views, which store data based on remote tables, are also known as snapshots. A snapshot can be redefined as a materialized view.
在 Oracle 中创建物化 View 的示例语法:
CREATE MATERIALIZED VIEW MV_MY_VIEW REFRESH FAST START WITH SYSDATE
NEXT SYSDATE + 1 AS SELECT * FROM ;
问候
关于mysql - 从 Hibernate/MySQL 获取数据性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19426331/