公司要求开发一个报表系统,报表的部分决定采用JasperReport,没什么问题;关键是生成的报表内容都是从数据库中查询出来,每一张表的数据量都很大(给电信用的,单张表最少是百万级的,很多千万级的)。现在试了下,一万条查询结果,生成报表需要快30秒,数据量更大的需要等待的时间用户肯定无法忍受。想请教下有什么好的优化方式?
    ps:报表的内容是根据jsp页面输入的查询条件得到的,如何优化查询时间也是个大问题,目前想到的方法是表分区,想请教下有没有更好的方法?最好能介绍下ETL

解决方案 »

  1.   

    1.合适的表分区
    2.建立适当的索引
    3.优化报表中的SQL语句
    4.业务上规避超大数据量的查询,如:SELECT * FROM XXX;
      

  2.   

    上面两位都说得很好。我再加上一点:
    存储设备最好用磁盘阵列,而且要用裸设备的方式存放数据,不要经过操作系统的文件系统了,这对性能会有很大的提高。
    ETL主要用现在数据仓库的应用中,以前叫ETCL
    ETL = Extract(抽取,其实就是查询),Transform(转换,比如做一些汇总等) and Load(装载到data warehouse)
    ETCL中的C就是Cleansing(即数据清洗,去掉一些垃圾数据,无用的数据)我觉得你的问题和ETL有一定的关系,但是关系不大。