zoukankan      html  css  js  c++  java
  • 统计报表优化中用到的处理DataTable的方法(通过此方法模仿左连接效果)

    这半年一直再做一个大项目的报表的开发与维护。(数据库:Oracle)
    这个项目中,报表一般都是统计各个机构指定项目的数据,以下给一个范例:

    一般的实现,后台一条SQL语句,以机构(organ)为基准,每个项目都用【select organ,count(*) from table group by organ】的写法构造出虚拟表,然后虚拟表通过organ左连接,为空的赋0。

    得出的SQL语句一般是这样(假设有两个项目要统计):
    SQL

    简单的报表,利用这种格式得出的DataTable提交给前台,前台统一实现(得出同一风格的HTML表现),这样,开发报表的工作就简化到大部分进行后台SQL语句的编写上,极大的提高了开发效率。
    然而,项目中有的报表,统计项目繁多,甚至有的总共50多个项目数据,也就是50多列,若还是这样写,SQL语句会非常长,传给数据库执行,Oracle将花很大的时间空间对SQL语句进行解析,这是十分消耗数据库服务器CPU的,直接导致系统性能受到影响。

    想办法进行优化,由于控制呈现的前台处理比较复杂,希望依然返回相同的DataTable,这样不需要修改前台程序。
    最后,想到了将每个统计项目分开查询,得出各个项目的数据(装入DataTable中),然后根据机构,拼接起来,在C#中实现左连接。以下就是对各个子DataTable进行左连接的处理方法。通过往TargetTable中加入不同的JoinTable的不同列,构造出要返回的TargetTable。
    这样一条由几十个虚拟表连接构造出来的SQL语句可以分成几十个单独的SQL语句分别执行,然后再用以下方法进行处理,得到左连接的效果。
    实现后进行测试,这种处理速度上有小幅度提高,很关键的是,执行查询的时候服务器负载得到了降低。

    处理DataTable的方法(通过此方法模仿左连接效果)
  • 相关阅读:
    jqgrid 重新加载,表头错乱问题
    TortoiseSVN 安装时出现 please install the universal crt
    随意下载:afinal jar
    Android com.daimajia.slider.library.SliderLayout 去掉底部半透明标题背景
    MUI ios下用video标签默认全屏播放
    ARouter学习随笔
    [总]Android高级进阶之路
    Android冷启动优化
    Dagger2源码浅析
    Fragment与Activity的生命周期对比
  • 原文地址:https://www.cnblogs.com/stubman/p/1567114.html
Copyright © 2011-2022 走看看