数据报表查询、导出时,经常发生耗时长,甚至超时、前端页面崩溃的问题。
1、前端页面为何崩溃?
前端需要加载的资源太多太大,超出了浏览器的承载能力,前端渲染失败。严重的情况,会直接把浏览器卡退。这种情况,可以通过限制查询条件,比如只查询最近一个月的报表;如果用户需要查看全部的,可以直接导出来看。
2、报表查询耗时久
这里的情况就比较复杂,分两种。
情况一
一种是数据库数据量太大,导致的查询慢。这种情况,可以通过增加数据库索引来解决,但如果在系统的前端页面给的筛选条件太多,用户使用的组合过多的话,数据库不可能给每一种查询组合都增加索引,即使都增加了,那么去查询这些数据库索引也同样会增加耗时,仍然达不到快速查询的效果。
因此,一般情况下,都是对用户常用的查询条件去添加数据库索引。
情况二
第二种情况,是数据量本身不大,但仍然查询或者导出时间达到了十几二十秒,夸张的可以达到好几分钟。这种情况一般就是链表查询太多引起的。
有的报表,下面可以链接十张表之多,一张表几十万数据,再链接一张,就要查询几十万x几十万,可想而知,如果有十张表,这个数据量是多么恐怖。
这种情况,一般在数据库表设计阶段就应该避开这种模式,但是如果已经设计成了这种方式,能够做的处理就很有限了。
要么,重新梳理数据库结构,看看还能不能拆表;要么就废弃表重做。
另外就是,如果新需求里,需要增加报表的查询字段,为了减少链表数量,提升查询性能,可以通过在主表里加冗余字段的方式来实现。
如果当前系统的这种深链接报表很多,且用户使用频繁,也实在没办法优化。那么,可以考虑将报表单独迁移到一个服务器上,这样,如果报表卡顿,只会影响报表的使用,不会影响到其他非报表页面的使用。