龙空技术网

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

波波说运维 926

前言:

眼前你们对“oracle数据库运行慢优化配置”大致比较注意,姐妹们都想要了解一些“oracle数据库运行慢优化配置”的相关文章。那么小编同时在网络上搜集了一些有关“oracle数据库运行慢优化配置””的相关资讯,希望兄弟们能喜欢,咱们快快来学习一下吧!

概述

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

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

存在问题

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

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

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

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进行简化,至于视图是否可以提高查询效率,就需要大家进一步测试了。

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

标签: #oracle数据库运行慢优化配置 #oracle给字段增加注释 #oracle 查询优化 #oracle中in语句优化 #oracle 优化or