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

  • 相关阅读:
    linux 安装jdk
    linux 安装 Redis
    jvisualvm监控远程jvm的两种连接方式
    list转map(JDK8-Lambda表达式)
    循环删除list中的某一元素的三种方式
    SpringBoot-@ControllerAdvice 拦截异常并统一处理
    Spring-@ControllerAdvice 拦截异常并统一处理
    Tomcat系列
    thinkPHP5.1模型User设计
    uniapp后台api设计(微信user表)
  • 原文地址:https://www.cnblogs.com/ssh-html/p/14469615.html
Copyright © 2011-2022 走看看