关于报表

birdy.chen 03-07-01

最初我们做的系统中是这样设计的,从数据库中取出所有的数据,然后根据客户定制的报表项进行计算,这样可以尽量程序做到与数据库无关,但实际应用中,数据量特别大时,尤其是在树形结构中的递归查询,速度特别慢,而且资源消耗大。最后只能改成,所有的计算都在取数据时完成,这样没有公用的东西,几乎一个报表需要一个MODEL,更做不到数据库无关。感觉这样并不好,怎样才能做到提取一个抽象的框架,不管用户怎样定制,所做的只是在抽象框架的基础上做扩展。
另外,数据库中的树形结构的递归查询,有什么好的方法快速查询吗,用ORACLE可以用START WITH子句,但其他数据库时怎么办呢

KillerMan
2003-07-01 14:24

增加用作缓存的临时表。第一次打开此报表计算,以后如果没有改变则取缓存。

zhongwen
2003-07-02 08:54

不知道你数据库量有多大,是什么样一个系统?做报表一般是用你说的方式,但有些报表可能根据业务需要,要直接生成,比如每日生成营收日报等。
建议:1.你可以让你的数据库要做查询的可能用到的字段加上一个或多个索引(或者复合索引)2.请尽量使用存储过程。 3.如果数据量实在太大,建议用归档方式,即把一年前或几年前数据做归档 4.如果你的报表上数据实在太多,请在夜间系统访问量比较小时,自动生成报表(存到一个新建的表中) 5.提高你的计算机硬件性能。

birdy.chen
2003-07-02 09:57

索引建了,能提高一部分性能
存储过程当然快了,但还是为了尽量与数据库无关,没用
系统中3000多个机构,所以递归时是特别慢的