sql 优化_详解Oracle的sql优化常见问题及优化思路

概述

数据管理型系统,由于用户的要求或者系统设计要求,会出现大量表进行join,还要进行大量统计性数据查询展示,甚至数据权限控制等操作。最后会导致sql异常复杂,随着数据量增加,或者只是应用到生产环境(正式环境)就会出现系统反应慢,体验差的现象,这个时候不得不对这些,复杂的sql进行优化。

sql优化是一个说容易不容易,说难也不难的问题,还是得具体问题具体分析,下面介绍下一般sql存在的问题和解决的思路。

f5f976e5e86bc953647c3e01f6e7a281.png

存在问题

一般sql语句性能达不到你的要求,会是下面几种情况:

  • 网速不给力,不稳定。
  • 服务器内存不够,或者SQL 被分配的内存不够。
  • sql语句设计不合理
  • 没有相应的索引,索引不合理
  • 没有有效的索引视图
  • 表数据过大没有有效的分区设计
  • 数据库设计太2,存在大量的数据冗余
  • 索引列上缺少相应的统计信息,或者统计信息过期
  • ....
fbca91fe7d7c85d3c9c06feb20af15d7.png

优化思路

如何找出来导致性能慢的的原因呢?思路如下:

1、用之前分享给大家的spooldb.sql和spoolsql.sql脚本一键获取sql的相关信息,分析sql慢的相关因素

2、对sql语句进行格式化,使sql条理清晰,甚至分步骤添加注释,弄清楚每个步骤是为了得到什么

3、用第一部格式化过的sql与最终需求做对比,没有用的表,就不要进行join了,没有用的字段也不要进行返回了。(这里要注意是不是存在太多重复的实体表)

4、分模块检查子查询,到底是哪个表查询速度慢,或者哪个条件导致的查询速度慢。

5、配合sql执行计划(前面脚本已经有了),尽量避免全表扫描,提前限制sql数据筛选范围,这里要考虑是不是建索引。

6、检查是否用了不合适的in查询,过量的in会导致效率骤然降低很多。

7、检查是否存在过多的or查询,or会导致全表扫描,能避免尽量避免。

8、检查子查询是否过于复杂,或者sql处理是否过于复杂,如果可以将复杂处理放到程序中进行。

9、可以用exists替代的地方,用exists进行替代。

10、可以建视图,对sql进行简化,至于视图是否可以提高查询效率,就需要大家进一步测试了。

08e14b5e57b96d689e85778565cb8f52.png

这里主要讲一个优化思路,后面会根据一些具体的sql来做优化,到时用案例做分析,感兴趣的朋友走一波关注哩~

24fad99247fa48f3dfcb484ae41a6550.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值