background image
优化分析:
第一种做法,不仅仅取到报表服务器上记录数多了,取数速度慢,而且报表模型需要对
表数据列进行分组运算,增加了报表运行时间;
第二种做法,数据库虽然要进行分组运算,但是数据库中有索引,运算速度快,且取到
报表服务器端的记录数大大减少,取数速度大大加快,因此在报表模型进行分组运算的时候
只要对很少的记录数进行,报表的运算速度大大加快了。
实验结果以及分析表明,第二种做法的性能远优于第一种。所以,分组应该尽量在 sql
里进行。
2.3 SQL 中直接排序代替报表中排序
报表计算过程中很多时候需要对数据进行排序,虽然排序运算可以在报表端进行,不过
我们还是建议在 SQL 中提前将数据排序,这是因为数据库中索引功能,通常是 C/C++语言
(往往在效率上比 Java 好)写的,会使得排序运算的速度很快。
2.4 SQL 中直接过滤代替报表中过滤
报表计算过程中很多时候并不需要对表中的所有记录进行操作,而只是需要对部分满足
条件的记录进行操作,虽然可以在报表设计器中对数据过滤,不过我们建议在 SQL 中对数
据提前过滤,这样数据库返回的数据就减少了,既加快了取数速度,也加快了报表的运算速
度。
3. 使用视图、存储过程
视图是由 SELECT 语句组成的查询定义的虚拟表,由一张或多张数据库实际的表中的数
据组成的,从数据库系统外部来看,视图就如同一张表一样。