【发布时间】:2011-07-26 20:11:12
【问题描述】:
我正在努力改进我正在从事的项目的 n+1 查询。我在下面显示的模型中使用 Hibernate,我想表达一个查询来检索与投资组合相关的所有项目,包括每个项目的最后两个价格(给定日期的价格和以前的价格)。
示例 API:
List<Items> items = findItemsWithLatestTwoPrices(portfolio, latestPriceDate);
目前我使用一个查询来提取与投资组合相关的所有项目,然后遍历这些项目以查询给定项目的两个最新价格(因此 n+1)。
我尝试使用相关子查询在本机 sql 中表达这一点,但性能很糟糕。这一点以及每天都有新价格(因此查询变得越来越慢)的事实让我认为我需要一个不同的模型,但我正在努力想出一个合理有效且随着时间推移保持不变的模型价格上涨的数量。
我一直在考虑不同的解决方案,包括将价格表示为链表,或使用某种树,但我相信还有更好的选择。我错过了一些明显的东西吗?有没有人在解决类似问题时提出了很好的解决方案?
只要性能不错,我并不关心我使用 HQL 还是原生 SQL。我也愿意对模型进行更改。
谢谢!
[编辑]
由于我有两年多的价格数据,并且可能有 1000 多件商品。投资组合,检索整个图表可能不是一个好主意。我还需要按日期随机访问,因此很遗憾将两个价格存储为项目上的字段不是一种选择。
【问题讨论】:
标签: hibernate optimization orm data-structures query-optimization