您的位置:首页 > 数据库 > Oracle

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

2016-05-03 23:26 381 查看
  

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







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

  先通过火狐的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的网络检测,看看那个请求耗时长,然后着重优化这几个方法,加索引,考虑缓存】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: