计算机系统应用教程网站

网站首页 > 技术文章 正文

详解Oracle数据库sql优化思路

btikc 2024-08-31 17:09:29 技术文章 13 ℃ 0 评论

概述

数据管理型系统,由于用户的要求或者系统设计要求,会出现大量表进行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来做优化,到时用案例做分析,感兴趣的朋友走一波关注哩~

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表