【Oracle】--11s到4s的SQL性能优化实例

  

        最近做的个人中心的主页面,主要显示用户的个人信息、投资理财收益、投资记录等信息。信息量很大,写的代码加载速度慢的都跟蜗牛差不多了~~~我要是用户我的抽死我自个抓狂抓狂抓狂

  首先,关键的时候到啦啊!

  先通过火狐的FireBug——网络,可以查看到,加载数据的时候,耗时最长的是toMyHope.htm,在某些方法前后打了时间点,网络加载图和控制台打印的结果如下:



  优化前:toMyHope.htm耗时11.67s,总时长14.2s,getFutureMonthProfit耗时5229ms、futureMonthProfit耗时5502ms



        随后通过Hibernate的show_sql监控,发现共连接数据库70多次,其中60多次都是同一个SQL语句。

        跟其他同事分析了一下,同一个SQL语句调用过多,很大一部分原因是因为没有采用左右连接。最开始采取的A表查询信息List,List遍历的时候,又再次连接数据库查询B表的信息(A表中查询到的字段为条件)。

         后来决定采用左连接的方式进行数据查询,把投资记录表、用户卡券表、卡券类型表、投资方案表通过左连接关联起来。

         下面是优化后的结果:


  

       优化后:toMyHope.htm耗时4.87s,总时长9.33s,getFutureMonthProfit耗时68ms、futureMonthProfit耗时393ms,单单是toMyHope.htm整体就比之前快了将近6s !   其他的大家感兴趣的也可以自己算一算~



        SQL语句:

<span style="font-family:Microsoft YaHei;font-size:14px;">SELECT
    *
FROM
    T_LOAN_BID lb
LEFT JOIN T_LOAN_SCHEME_INFO lci ON lb.PRO_ID = lci.PRO_ID
LEFT JOIN T_CUST_USER_VOUCHER tcuv ON lb.VOUCHER_ID = tcuv. ID
LEFT JOIN T_VOUCHER_TYPE tvt ON tcuv.VOUCHER_TYPE_ID = tvt. ID
WHERE
    LB.USER_ID =: User_ID</span>

          之前并没有觉得左连接效率高,不过今天一尝试,感觉确实不错,实践出真知~

          另外,询问了迁迁和青峰师傅,他们也给了我一些别的思路,针对页面加载大量数据,速度慢这种情况,不过还没有一一尝试。都是好东西,希望能跟大家一起分享。


【    *同步加载主数据,异步加载其他表的数据

        *页面慢,分为两部分考虑,一是图片,js,css等静态请求,可以文件压缩合并等。二就是动态请求,你先用firebug的网络检测,看看那个请求耗时长,然后着重优化这几个方法,加索引,考虑缓存




评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值