2012-01-23 113 views
0

针对我正在开发的应用程序我必须生成综合报告,其中应用程序必须读取数据量非常大的数据,并且数据库中的记录数量超过100,000条。我们发现使用grails/hibernate(我们在整个应用程序中使用的是事实上的ORM)效果不佳。在某些情况下,即使查询结果集小到10,000条记录,它也需要1.3+秒。想知道是否有任何调整我缺少或如果它更好地移动到本地SQL的这种要求。grails性能优化

只要提及表非常简单,并且没有连接。我更喜欢用Hibernate作为标准来过滤数据的唯一原因是非常动态的,并且产生了多个可选列。

回答

2

您是否正在查询数据库以将100,000条记录带到中间层,以便您可以对该报告进行计算?如果答案是肯定的,我会考虑为该报告存储过程或视图,以便您可以在数据库服务器上执行计算,并在生成报告时减少数据量和处理量。

检查您的模式以确保您在WHERE子句中的所有列上都有索引,包括外键。从Hibernate获取生成的SQL并解释计划以查看时间花在哪里。

这是人们在Hibernate中遇到的一个问题:生成的SQL性能不够好时该怎么办。如果Hibernate无法完成这项工作,你可能不得不求助于其他的东西,比如直接JDBC或者iBatis。

+0

使用hibernate可以限制列名吗?即,而不是返回所有列,我认为如果我减少可能有助于性能的数据回合 – Amit

+0

您可以使用HQL,但问题是它仍然会引用您的ORM映射。 – duffymo