extjs 动态加载列表,优化思路
功能截图
之前做法,先查询每一行的前4个字段,然后动态拼接出其他的字段,效率极低,以下是优化后的代码,供参考,只提供一个优化思路,授人以鱼不如授人以渔
后台Sql语句优化(语法仅支持Oracle)
SELECT PROJ_NO, ALL_SECTION, GRAND_SEC, SPCID, FIR_SCH_ID_1166, BEGIN_DATE_1166, END_DATE_1166, FLOAT_CYC_1166, FIR_SCH_ID_1167, BEGIN_DATE_1167, END_DATE_1167, FLOAT_CYC_1167, FIR_SCH_ID_1168, BEGIN_DATE_1168, END_DATE_1168, FLOAT_CYC_1168, FIR_SCH_ID_1169, BEGIN_DATE_1169, END_DATE_1169, FLOAT_CYC_1169, FIR_SCH_ID_1170, BEGIN_DATE_1170, END_DATE_1170, FLOAT_CYC_1170, FIR_SCH_ID_1171, BEGIN_DATE_1171, END_DATE_1171, FLOAT_CYC_1171, FIR_SCH_ID_1172, BEGIN_DATE_1172, END_DATE_1172, FLOAT_CYC_1172, FIR_SCH_ID_1173, BEGIN_DATE_1173, END_DATE_1173, FLOAT_CYC_1173, FIR_SCH_ID_1174, BEGIN_DATE_1174, END_DATE_1174, FLOAT_CYC_1174, FIR_SCH_ID_1175, BEGIN_DATE_1175, END_DATE_1175, FLOAT_CYC_1175, FIR_SCH_ID_1176, BEGIN_DATE_1176, END_DATE_1176, FLOAT_CYC_1176, FIR_SCH_ID_1177, BEGIN_DATE_1177, END_DATE_1177, FLOAT_CYC_1177, FIR_SCH_ID_1178, BEGIN_DATE_1178, END_DATE_1178, FLOAT_CYC_1178, FIR_SCH_ID_1179, BEGIN_DATE_1179, END_DATE_1179, FLOAT_CYC_1179, ALL_SECTION_BEGIN_DATE, ALL_SECTION_BEGIN_DATE2 FROM (SELECT Y.PROJ_NO, Y.SPCID, , Y.FIR_SCH_ID)) FIR_SCH_ID_1166, , Y.BEGIN_DATE)) BEGIN_DATE_1166, , Y.END_DATE)) END_DATE_1166, , Y.FLOAT_CYC)) FLOAT_CYC_1166, , Y.FIR_SCH_ID)) FIR_SCH_ID_1167, , Y.BEGIN_DATE)) BEGIN_DATE_1167, , Y.END_DATE)) END_DATE_1167, , Y.FLOAT_CYC)) FLOAT_CYC_1167, , Y.FIR_SCH_ID)) FIR_SCH_ID_1168, , Y.BEGIN_DATE)) BEGIN_DATE_1168, , Y.END_DATE)) END_DATE_1168, , Y.FLOAT_CYC)) FLOAT_CYC_1168, , Y.FIR_SCH_ID)) FIR_SCH_ID_1169, , Y.BEGIN_DATE)) BEGIN_DATE_1169, , Y.END_DATE)) END_DATE_1169, , Y.FLOAT_CYC)) FLOAT_CYC_1169, , Y.FIR_SCH_ID)) FIR_SCH_ID_1170, , Y.BEGIN_DATE)) BEGIN_DATE_1170, , Y.END_DATE)) END_DATE_1170, , Y.FLOAT_CYC)) FLOAT_CYC_1170, , Y.FIR_SCH_ID)) FIR_SCH_ID_1171, , Y.BEGIN_DATE)) BEGIN_DATE_1171, , Y.END_DATE)) END_DATE_1171, , Y.FLOAT_CYC)) FLOAT_CYC_1171, , Y.FIR_SCH_ID)) FIR_SCH_ID_1172, , Y.BEGIN_DATE)) BEGIN_DATE_1172, , Y.END_DATE)) END_DATE_1172, , Y.FLOAT_CYC)) FLOAT_CYC_1172, , Y.FIR_SCH_ID)) FIR_SCH_ID_1173, , Y.BEGIN_DATE)) BEGIN_DATE_1173, , Y.END_DATE)) END_DATE_1173, , Y.FLOAT_CYC)) FLOAT_CYC_1173, , Y.FIR_SCH_ID)) FIR_SCH_ID_1174, , Y.BEGIN_DATE)) BEGIN_DATE_1174, , Y.END_DATE)) END_DATE_1174, , Y.FLOAT_CYC)) FLOAT_CYC_1174, , Y.FIR_SCH_ID)) FIR_SCH_ID_1175, , Y.BEGIN_DATE)) BEGIN_DATE_1175, , Y.END_DATE)) END_DATE_1175, , Y.FLOAT_CYC)) FLOAT_CYC_1175, , Y.FIR_SCH_ID)) FIR_SCH_ID_1176, , Y.BEGIN_DATE)) BEGIN_DATE_1176, , Y.END_DATE)) END_DATE_1176, , Y.FLOAT_CYC)) FLOAT_CYC_1176, , Y.FIR_SCH_ID)) FIR_SCH_ID_1177, , Y.BEGIN_DATE)) BEGIN_DATE_1177, , Y.END_DATE)) END_DATE_1177, , Y.FLOAT_CYC)) FLOAT_CYC_1177, , Y.FIR_SCH_ID)) FIR_SCH_ID_1178, , Y.BEGIN_DATE)) BEGIN_DATE_1178, , Y.END_DATE)) END_DATE_1178, , Y.FLOAT_CYC)) FLOAT_CYC_1178, , Y.FIR_SCH_ID)) FIR_SCH_ID_1179, , Y.BEGIN_DATE)) BEGIN_DATE_1179, , Y.END_DATE)) END_DATE_1179, , Y.FLOAT_CYC)) FLOAT_CYC_1179, Y.ALL_SECTION, Y.ALL_SECTION_BEGIN_DATE, Y.ALL_SECTION_BEGIN_DATE2, Y.GRAND_SEC FROM (SELECT FSI.PROJ_NO, FSI.SPCID, FSI.STANDA_SCHEDULE_NODE_ID, SSN.NODE_NAME, SSN.NODE_SEQ, FSI.BEGIN_DATE, FSI.END_DATE, FSI.FLOAT_CYC, FSI.ALL_SECTION, FSI.ALL_SECTION_BEGIN_DATE, FSI.ALL_SECTION_BEGIN_DATE2, FSI.FIR_SCH_ID, FSI.GRAND_SEC FROM FIRST_SCHEDULE_INFO_VIEW FSI LEFT JOIN STANDA_SCHEDULE_NODE SSN ON SSN.STANDA_SCHEDULE_NODE_ID = FSI.STANDA_SCHEDULE_NODE_ID ) Y GROUP BY Y.PROJ_NO, Y.SPCID, Y.ALL_SECTION, Y.ALL_SECTION_BEGIN_DATE, Y.GRAND_SEC, Y.ALL_SECTION_BEGIN_DATE2)
后台逻辑,拼接Sql语句
string ssnSql = string.Format("SELECT T.* FROM STANDA_SCHEDULE_NODE T WHERE T.STANDA_SCHEDULE_ID = {1} AND T.IS_DEL = '8' {0} ORDER BY T.NODE_SEQ", StringUtil.isNotNullOrBlank(ssnIds) ? "AND T.STANDA_SCHEDULE_NODE_ID IN (" + ssnIds.Replace(DbUtil.colSplit, ',') + ")" : "", PlanUtil.FirstScheduleS); DataTable ssndt = DbUtil.QueryDT(ssnSql); StringBuilder sb = new StringBuilder(); ) { List<Standa_Schedule_Node> ssnList = BeanUtil.ToEntity<Standa_Schedule_Node>(ssndt); foreach (Standa_Schedule_Node ssn in ssnList) { sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.FIR_SCH_ID)) FIR_SCH_ID_{0},", ssn.Standa_Schedule_Node_Id)); sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.BEGIN_DATE)) BEGIN_DATE_{0},", ssn.Standa_Schedule_Node_Id)); sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.END_DATE)) END_DATE_{0},", ssn.Standa_Schedule_Node_Id)); sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.FLOAT_CYC)) FLOAT_CYC_{0},", ssn.Standa_Schedule_Node_Id)); sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.E_BEGIN_DATE)) E_BEGIN_DATE_{0},", ssn.Standa_Schedule_Node_Id)); sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.E_END_DATE)) E_END_DATE_{0},", ssn.Standa_Schedule_Node_Id)); } } string conditionSql = ""; conditionSql = sb.ToString(); string querySql = @"SELECT {2} FROM (SELECT Y.PROJ_NO, Y.SPCID, {0} Y.ALL_SECTION, Y.ALL_SECTION_BEGIN_DATE, Y.ALL_SECTION_BEGIN_DATE2, Y.GRAND_SEC FROM (SELECT FSI.PROJ_NO, FSI.SPCID, FSI.STANDA_SCHEDULE_NODE_ID, SSN.NODE_NAME, SSN.NODE_SEQ, FSI.BEGIN_DATE, FSI.END_DATE, FSI.E_BEGIN_DATE, FSI.E_END_DATE, FSI.FLOAT_CYC, FSI.ALL_SECTION, FSI.ALL_SECTION_BEGIN_DATE, FSI.ALL_SECTION_BEGIN_DATE2, FSI.FIR_SCH_ID, FSI.GRAND_SEC FROM FIRST_SCHEDULE_INFO_VIEW FSI LEFT JOIN STANDA_SCHEDULE_NODE SSN ON SSN.STANDA_SCHEDULE_NODE_ID = FSI.STANDA_SCHEDULE_NODE_ID {1}) Y GROUP BY Y.PROJ_NO, Y.SPCID, Y.ALL_SECTION, Y.ALL_SECTION_BEGIN_DATE, Y.GRAND_SEC, Y.ALL_SECTION_BEGIN_DATE2)"; if (StringUtil.isNotNullOrBlank(v.Page) && v.Page != "-1") { ; v.Dt = DbUtil.Query(String.Format(querySql, conditionSql, DbUtil.WHEREOTO + v.getCondition(), StringUtil.nullOrBlankTOStr(v.DFields, "*")), v.Start, v.Limit, ref total); v.Total = total; } else { v.Dt = DbUtil.QueryDT(string.Format(querySql, conditionSql, DbUtil.WHEREOTO + v.getCondition(), StringUtil.nullOrBlankTOStr(v.DFields, "*"))); } return v.Dt;
Oracle Decode函数用法,可参考:https://www.cnblogs.com/Lightning-Kid/p/3954202.html
extjs 动态加载列表,优化思路的更多相关文章
- golang动态加载原生代码思路
golang动态加载原生代码思路(非plugin,非so文件.使用mmap形式运行机器码,可释放) 1.用go tool objdump,可以看到任意函数的机器码.汇编指令.偏移.(go源码下面有一个 ...
- 关于实现Extjs动态加载类的方式实现
Extjs4以前的版本没有动态加载类的方式,这样开发程序的时候加载很多的js会导致加载变慢,由于本人一直使用extjs3的版本进行开发,于是简单实现了一个动态加载类的管理器,使用方式与extjs4的方 ...
- Extjs-树 Ext.tree.TreePanel 动态加载数据
先上效果图 1.说明Ext.tree.Panel 控件是树形控件,大家知道树形结构在软件开发过程中的应用是很广泛的,树形控件的数据有本地数据.服务器端返回的数据两种.对于本地数据的加载,在extjs的 ...
- shiro不重启动态加载权限
最近一朋友让我帮他做一个后台权限管理的项目.我就在我原来的项目加加改改但是还是不理想,查了不少资料也走了不了弯路...... shiro基本的配置我就不多说了这个很简单自己查查资料就完成----下面是 ...
- JQuery加载列表实现动画滚动(自上而下挤)
这个例子是jquery动态加载列表,并通过定时刷新,实现其循环滚动效果的一个例子. 1.HTML代码: <div class="fake-table"> <li ...
- ExtJs 4.2.1 复选框数据项动态加载(更新一下)
最近在做博客项目,后台管理用的是ExtJs4.2.1版本,因为是初学所以在使用的时候也遇到不少的这样或那样的问题,也写了不少这方面的博客,今天要写的博客是关于复选框数据项动态的加载功能,以前也没用过, ...
- 移动端性能优化动态加载JS、CSS
JS CODE (function() { /** * update: * 1.0 */ var version = "insure 1.1.0"; var Zepto = Zep ...
- ExtJs中动态加载机制研究(转)
觉得写的太好了,怕弄丢了,转一下:http://extjs.org.cn/node/659 昨天我们team对于extjs的动态加载机制做了些深入研究,这里先share下controller加载的结果 ...
- ExtJs 通过分析源代码解决动态加载Controller的问题
通过分析源代码解决动态加载Controller的问题 最近在研究ExtJs(4.2.0)的MVC开发模式,具体Extjs的MVC如何使用这里不解释,具体参见ExtJs的官方文档.这里要解决的问题是如何 ...
随机推荐
- SpringBoot电商项目实战 — 前后端分离后的优雅部署及Nginx部署实现
在如今的SpringBoot微服务项目中,前后端分离已成为业界标准使用方式,通过使用nginx等代理方式有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多端化服务(多 ...
- Nginx在开发中常用的基础命令
场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...
- Linux7 64安装 oracle 11g Error in invoking target 'agent nmhs' of makefile
在makefile中添加链接libnnz11库的参数修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将$(MK_EMAGENT_NMECTL)修改为:$(MK_EMA ...
- openldap数据双向同步
配置双主复制功能,在主1和主2上执行均下面的步骤 vim syncprov_mod.ldif dn: cn=module,cn=configobjectClass: olcModuleListcn: ...
- Cookie与Session会话技术
Cookie与Session会话技术 一.什么是会话 会话:当用户打开浏览器,访问多个WEB资源,然后关闭浏览器的过程,称之为一个会话,选项卡,弹出页面都属于这个会话,且共享同一个session. 二 ...
- uiautomatorviewer提示Unable to connect to adb. Check if adb is installed correctly解决方法
转自:https://www.jianshu.com/p/c8581a70d1bc 解决方案: 1.打开 "E:\android-sdk_r24.4.1-windows\android-s ...
- 面试连环炮系列(十):一个线程调用两次start会怎么样
一个线程调用两次start会怎么样 Java的线程是不允许启动两次的,第二次调用必然会抛出IllegalThreadStateException,这是一种运行时异常. 谈谈线程的生命周期和状态转移 新 ...
- mitmproxy 使用笔记
零.背景 我之前写过关于 charles 的使用笔记,为什么现在又要来写同类型的 mitmproxy 工具呢?下面我会娓娓道来他比 charles 多出的强大功能. 一.介绍 mitmproxy 是一 ...
- Hyperledger Fabric:最简单的方式测试你的链码
一直以来,写完链码进行测试都要先搭建一个Fabric环境,然后安装链码进行测试,实际上Fabric提供了最为简单的方式可以允许我们对编写的应用链码进行功能测试,不需要搭建一个完整的Fabeic环境.而 ...
- centos7下安装客户端rabbitmq9.0
下载目前最新rabbitmq客户端版本: wget https://github.com/alanxz/rabbitmq-c/archive/v0.9.0.tar.gz php扩展 : wget ht ...