zoukankan      html  css  js  c++  java
  • 记录一次Oracle数据库中的sql优化

      sql优化的问题之前没怎么遇到过,真实的面试中有很多sql优化的面试题,但是在实际的工作中,很少能有优化sql的机会,但是这次有一个sql优化的任务,是一个统计的功能,页面响应速度很慢,有时候还会出现无法响应的结果,看了一下整个接口,从controller层到service层再到sql语句,就是很普通的代码,中间虽然有挺多的判断,但是不至于出现这种响应时间这么长的结果,于是,我把注意力放到了sql的优化上。

    一、sql优化

      只写最终结果的话,确实很没意思了,还是把sql优化的一些可能方案都写一下吧,都是从网上各种博客搜索的,这里只是做了一个总结

    1、explain 进行SQL语句的分析

    参考链接:https://www.cnblogs.com/xuanzhi201111/p/4175635.html

    2、SQL语句中的in包含的值不应该过多

    3、select语句务必指明查询字段名称,避免过的的内存浪费

    4、如果排序字段没有使用索引,就尽量少排序

    5、如果限制条件中其他字段没有使用索引,就尽量少使用or

    6、区分in和exists not in 和not exists

    7、使用合理的分页方式进行分页已提高分页效率

    8、分段查询

    9、避免where子句中对字段进行null值判断

    10、不建议使用%前缀进行模糊查询匹配

    11、避免where子句对字段进行表达式操作

    12、注意范围查询语句,比如between < > 会造成索引失效

    13、join的优化,利用小表去驱动大表

    二、最终结果方案

      试了很多上上面的方案,可是从响应时间来看,并没有很好的作用,于是,只好用他们代码中的优化方案:

     1    select /*+ parallel(CR,4) parallel(SR,4) */
     2     CR.EMP_NO,
     3     CR.EMP_NAME,
     4     SUM(CR.VALID_FLAG) validCount,
     5     SUM(CR.MAJOR_FLAG) majorCount,
     6     COUNT(CR.CALL_SN_NO) callCount,
     7     COUNT(DISTINCT CR.UUID) srvCount
     8      from A_TABLE CR
     9      JOIN B_TABLE SR
    10        ON SR.SRV_SN_NO = CR.CALL_SN_NO
    11     group by CR.EMP_NO, CR.EMP_NAME

    就是上面的parallel()函数,具体的话,参考这篇博主文章:

    参考链接:https://blog.csdn.net/u012354280/article/details/16369149

  • 相关阅读:
    UVA 10600 ACM Contest and Blackout(次小生成树)
    UVA 10369
    UVA Live 6437 Power Plant 最小生成树
    UVA 1151 Buy or Build MST(最小生成树)
    UVA 1395 Slim Span 最小生成树
    POJ 1679 The Unique MST 次小生成树
    POJ 1789 Truck History 最小生成树
    POJ 1258 Agri-Net 最小生成树
    ubuntu 用法
    ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能
  • 原文地址:https://www.cnblogs.com/ssh-html/p/14469615.html
Copyright © 2011-2022 走看看