上周五,在现场处理一个web页面缓慢的问题,主要功能是显示非常多的统计数据,画出很多图表。听说是新加了一个功能块后,页面变的很慢,于是我先建议关闭新加的功能,后来还是很慢;于是建议分块关闭页面上的功能。策略是先按大块找问题出现的地方,再进入块找细节问题,类似2分法,当然也可以先关闭一半页面功能。慢慢变的快了一点,最后全关了,才秒出。
看来不仅是局部问题了,我开始仔细分析代码,页面上的功能主要就是各种各样的查询SQL语句,用的是Oracle,主要问题有以下方面:
1.很多统计的查询条件是 id like '____SH' and name like '%上海%'
了解下来,这是一个类型的的数据,但是并没有单独的类型字段,后期只能用这样的条件来区分出来。
所以问题的根源是:数据字段设计缺失,应该设计特有的类型字段;这两个字段都无法利用上索引来提高查询速度。因为不确定的部分在前面,如果是'上海%'还有可能。
解决方法是:instr的效率在有索引的情况下应该高于like,把前者用subStr截取后='SH',后者用instr>0的方法,几乎没有明显的提高。另一终极处理就是新建类型字段,一次性处理历史数据,新数据可以完善前台功能,或者数据库上建触发器,新增数据时按条件置类型字段,新字段上当然建好索引。
2.很多统计的主外键关联是trim(pk)=trim(id)
了解下来,因为有些数据是其它地方交换过来的,提供的数据不规范,前后可能有空格,造成查不到需要的数据。
所以问题是:规范提供的数据,入库的数据一定要是标准的。外键上的索引也用不上,因为带有函数,总不至于都建函数索引吧。
解决方案:一方面查找历史数据,也许只是个别地方提供的数据有问题,要求修改。当然可以先处理老数据,再用触发器来预处理新数据,但这绝不好办法。
3.有一个统计是按提前,正常,超期分类得到各自数据,总数又用了一个sql去算,为何不直接把三个分类数据加起来呢?
还发现一个重要的业务ID用了distinct,我问这个会有重复吗?一查字段是主键。
还发现三个数据,都有一个完成的字段判断,写在每类的case when里面,为何不写在查询外面的where条件里呢?既然都有这个case when的条件?
4.发现所有的统计是从年初到当天,而每一个sql语句里都有sysDate转日期。
通常我们页面呈现的数据是有一个日期范围的,或者当月,或者一个月内,根据业务与数据情况而定,不可能没有限制。我们查询股票交易都有很严格的时间限制,数据实在是太多了,历史数据也要求开始与结束不通过比如1个月。
例子是极端的情况,但当年的数据,也许后面太多会计算很慢,要考虑一下。当然这个sql中的今日,为何不能在外面算好,统一为常量传给数据库计算?而现在每个SQL都要再算一下。
因为数据的日期精确到时分秒,所以我考虑是不是做一个日期的函数索引?只到天,这样在条件中也使用日期函数,也许会快一点。
5.一个数据表的查询条件一样,但有和不同其它表的关联统计,目前是一个个独立的SQL,是否考虑把这些都join在一起,一个语句中返回结果,可以合并一些查询SQL。因为使用连接池,也许效果不太明显。我的习惯是用一条SQL搞定数据,而不要返回后再各种处理,充分利用数据库的功能。
6.页面中的统计太多了,局部加载也是一个方案,当鼠标拉下来的时候,再进行查询展示屏幕后部分功能。
7.脚本后置,异步获取数据,先让页面主体结构出来也是一个方案。
8.提前缓存查询结果也是一个策略,考虑到数据实时性要求不高时,可以提前在后台计算出数据。唯独注意系统启动时必须计算一次,否则没数据就尴尬了。
9.其它情况,完全处理好后再补充,欢迎交流各种心得。
不过太关注细节是没前途的,呵呵~
分享到:
相关推荐
本知识点主要探讨如何实现一个Web页面,允许用户上传CSV文件,并进行相关的处理。 首先,我们需要在Web页面上创建一个文件输入元素,让用户选择CSV文件。这通常通过HTML5的`<input type="file">`标签实现。例如: ...
【NETBEANS做的WEB登录页面】是一个基础的Web开发教程,特别适合NETBEANS的新手。NETBEANS是一款流行的开源集成开发环境(IDE),广泛用于Java、PHP、HTML5等Web开发。它提供了丰富的功能,如代码编辑、调试、版本...
在Web开发中,登录页面和后台管理页面是网站的核心组成部分,它们确保了用户的安全性和管理员的有效控制。这个压缩包提供的是静态HTML源码文件,意味着它们不包含服务器端的脚本,如PHP、Java或ASP.NET,而是由...
在Web开发中,将用户上传的Excel文件读取并保存到数据库是一项常见的需求。这个项目实现了这个功能,提供了从头到尾的完整代码,对于学习和应用都非常有帮助。下面我们将详细探讨涉及的知识点。 首先,我们需要理解...
在网页设计领域,Web页面模板是一种预先设计好的布局框架,用于快速构建网站并提供一致的视觉体验。"很实用很漂亮的web页面模板"这个标题暗示了我们正在讨论的是一套高效且美观的模板,适用于那些希望节省时间并创造...
在“大学新手做的WEB页面设计 适合作为作业”这个项目中,我们可以探索一系列与Web页面设计相关的基础知识,这些知识对于初学者来说至关重要。Web页面设计是计算机科学和信息技术领域中的一个关键部分,特别是对于...
这种技术基于Office Web Components(OWC),这是一个由微软开发的组件集,用于在Web浏览器中展示和操作Office文档,包括Excel。下面将详细解释如何实现这一功能,以及涉及的关键知识点。 首先,我们要理解`classid...
HTML手机端WEB纯静态页面是为移动设备设计的网页,主要特点是不依赖服务器端的动态处理,而是由HTML、CSS和JavaScript等前端技术构建而成。这样的页面能够快速加载,适应不同屏幕尺寸,提供良好的用户体验。以下是...
PB11.5是PowerBuilder 11.5的简称,这是一个由Sybase公司(现为SAP的一部分)开发的强大的面向对象的编程...这对于熟悉PB的开发者来说,无疑是一次重大升级,他们可以利用这些新功能构建出更现代、更交互式的Web应用。
首先,我们要理解的是,为了在Web页面上显示和编辑Excel,我们需要一个能够处理Excel文件的控件。常见的解决方案有两种:一种是使用Microsoft Office Interop服务,另一种是使用第三方控件。由于Interop服务依赖于...
在IT行业中,大华OCX插件是一种专为嵌入Web页面设计的控件,用于实现与大华摄像头的交互。这种插件的核心功能是使Web应用能够无缝调用大华摄像头的视频采集和控制能力,尤其适用于需要实时监控或者视频会议等应用...
ASP.NET Web 页面中的电子称串口控件是用于在网页上与硬件设备,如电子称进行通信的一种技术。这种控件通常使用ActiveX技术,允许客户端浏览器与串口设备交互,实现数据的读取和控制。本文将详细介绍如何在ASP.NET...
"好看的web登录页面"这一主题涵盖了多个方面的设计原则和技术要点。 首先,从视觉设计的角度来看,"好看"意味着页面需要有吸引人的布局和色彩搭配。设计师通常会选择清晰的背景图像或者简洁的纯色,以营造舒适和谐...
点击webComponents.exe安装 注意版本号和 32位 64位(这里跟正一下 木有64位尴尬尴尬) 如果没有合适的 请去官网下载 第二步:将文件夹中 demo.js demo.css webVideoCtrl.js 这3个文件导入你的项目,还...
1. **大华OCX控件**:这是大华公司为开发者提供的一种接口,通过该控件可以方便地集成大华网络摄像机的视频流到Web页面中。控件的主要功能包括视频播放、控制操作、视频抓拍等。 2. **ActiveX技术**:OCX控件是基于...
并输出含有语义结构的提取结果文件(XML文件),众所周知,Web页面显示的信息是给人阅读的,对于机器来说,是无结构的,MetaSeeker解决了一个关键问题:将无结构的Web页面信息转换成有结构的适于机器处理的信息。...
web页面上的雷达图,使用javascript+svg生成。 支持firefox chrome safari 更多功能查看 http://blog.csdn.net/babyding/article/details/7776452
这个压缩包“路由器web服务器网页源码.zip”包含了一系列用于构建和控制路由器界面的文件,如设置页面、帮助页面以及JavaScript(js)、CSS(层叠样式表)和HTML(超文本标记语言)文件。这些文件共同构成了用户通过...
WEBUI插件是这个过程的关键,它允许UE5项目集成Web页面,并与之进行交互。安装插件后,我们可以创建一个Web界面,然后在UE5的蓝图或C++代码中调用相应的API,实现数据发送和接收。插件通常会提供一些预定义的功能,...
System.web.dll包含了一系列的命名空间,如System.Web、System.Web.UI、System.Web.SessionState等,这些命名空间提供了处理HTTP请求、响应、会话状态管理、身份验证、授权等功能的类。例如,HttpApplication类是...