记录一次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

 

posted @ 2021-03-10 16:07  ssc在路上  阅读(81)  评论(0编辑  收藏  举报