https://baijiahao.baidu.com/s?id=1609391382597168099&wfr=spider&for=pc
1、ORACLE 优化内容
根据业务分析人员、设计人员、应用程序开发人员、数据库管理员、系统管理员几个不同的角色,针对每个不同角色,进行针对性的内容优化。
2、怎样写好SQL语句
(1)、 尽量简单,模块化
(2)、易读、易维护
(3)、节省资源
(4)、 内存
(5)、CPU
(6)、 扫描的数据块要少
(7)、少排序
(8)、不造成死锁 ( 检查是否被锁:v$locked_object )
3、SQL优化的一般性原则
(1)、目标:
减少服务器资源消耗(主要是磁盘IO);
(2)、设计方面:
合适的索引,索引的双重效应,列的选择性;
(3)、编码方面:
利用索引,避免大表FULL TABLE SCAN;
合理使用临时表;
避免写过于复杂的sql,不一定非要一个sql解决问题;
在不影响业务的前提下减小事务的粒度;
4、优化概括(SQL语句基本原则)
● 查询尽量用确定的列名,少用*号。
select * from bdc_zc_qs;
性能优化后的语句: select bzm_qs,ywh,… from bdc_zc_qs;
● 尽量少嵌套子查询,这种查询会消耗大量的CPU资源;
● 比较多or运算的查询能使用union all 替换 or运算,建议分成多个查询,用union all联结起来;
● 多表查询选择最有效率的表名顺序;
oracle解析器对表解析从右到左,所以记录少的表放在右边;
● 尽量多用commit语句提交事务,可以及时释放资源、解锁、释放日志空间、减少管理花费;
● 尽量避免使用dblink访问数据库,使用dblink会产生数据上的网络交互,极大影响性能;
● union all 替换union,union 原理是把两个集合union all起来在进行排序去重复;
● 尽量不要使用distint,distinct会产生排序;
● 视图尽量不要使用order by;
● 避免在索引列上使用函数,计算等;
● 避免在索引列上使用not条件;
● 注意查询列字段类型,避免索引列自动转换;
例如:select * from bdc_zc_qs qs where qs.ywh=666,这种情况oracle会转换成to_number(qs.ywh)=666
● 用not exists 替代not in;
● 符号运算使用顺序:=、>=、>、<>;
● 使用where条件时候把最优的条件放最后,oracle采用自下而上的顺序解析WHERE子句,根据这个原理, 当在where 子句中有多个表联接时,where 子句中排在最后的表应当是返回行数可能最少的表,有过滤条件的子句应放在where 子句中的最后。
5、SQL语句优化的过程
(1)、定位有问题的语句;
(2)、检查执行计划;
(3)、 检查执行过程中优化器的统计信息;
(4)、分析相关表的记录数、索引情况;
(5)、 改写SQL语句、使用HINT、调整索引、表分析;
(6)、有些SQL语句不具备优化的可能,需要优化处理方式;
6、SQL语句执行过程
7、SQL语句处理过程