oracle sql优化文档,Oracle-SQL优化--总结

这篇博客总结了Oracle SQL优化的关键点,包括检查缺失的统计信息、索引问题和SQL本身效率的提升。强调了查看执行计划以评估SQL性能的重要性,以及避免使用低效的SQL编写方式,如避免在日期比较中使用TO_CHAR。还介绍了多表关联的三种方式:Nested Loop, Hash Join和Sorted Merge。此外,提到了Oracle的两种优化器:CBO和RBO。
摘要由CSDN通过智能技术生成

Oracle SQL优化 总结Oracle SQL优化 总结

之前的blog中零零散散的整理了一些优化相关的内容,找起来比较麻烦,所以总结一下,查看的时候方便一点。这篇BLog只看SQL 优化的相关的注意事项,数据库优化部分以后有空在整理。

SQL 的优化主要涉及几个方面:

(1) 相关的统计信息缺失或者不准确

(2) 索引问题

(3) SQL 的本身的效率问题,比如使用绑定变量,批量DML 采用bulk等,这个就考验写SQL的基本功了,这一点也是最主要的一点。

一.SQL 编写注意事项1.1 查看SQL

对于生产环境上的SQL,可以从AWR 或者 Statspack 报告中获取相关的SQL 信息。

这部分参考:

Oracle AWR 介绍

http://www.doczj.com/doc/62e5280b4a7302768e99391d.html/tianlesoftware/article/details/4682300

statspack安装使用 和report 分析

http://www.doczj.com/doc/62e5280b4a7302768e99391d.html/tianlesoftware/article/details/4682329

查看SQL 的性能怎么样,最直接的工具就是通过执行计划,通过执行计划可以看到SQL 的执行路径,逻辑读,物理读等信息,可以这些信息,可以帮助我们判断SQL 是否还有优化的余地。

1.2 SQL 编写的具体注意事项 这部分工作是基本功。 在SQL 编写过程中, 避免一些低效的写法,能将SQL的效率提高几倍。 如:

to_char(created,'yyyy') = '2011'

trunc(created,'y') = to_date('01-jan-2011','dd-mon-yyyy')

与使用TRUNC 相比,使用TO_CHAR 所用的CPU 时间与前者相差一个数量级(即相差12倍)。因为TO_CHAR 必须把日期转换为一个串,这要使用一个更大的代码路径,并利用当前的所有NLS来完成这个工作。然后必须执行一个串与串的比较。另一方面,TRUNC 只需把后5 个字节设置为1.然后将两个7 字节的二进制数进行比较。因此,如果只是要截断一个DATE 列,你将应该避免使用TO_CHAR。

之前从网上转载了一篇文章,链接如下:

Oracle SQL的优化

http://www.doczj.com/doc/62e5280b4a7302768e99391d.html/tianlesoftware/article/details/4672023

这是几年前转载的文章,其中内容有些也有误,这里就不更正了。

1.3 多表关联方式 表之间的关联有如下三种方式:

(1) Nested Loop

Inner table 循环与outer table匹配,这种是表有索引,选择性较好,表之间的差距不大。 ===》两层for 循环,小表匹配大表。

(2) Hash John

小表做hash ,放内存,然后拿大表的每条记录做hash,然后与之前小表的Hash 值匹配。==》大表匹配小表。

(3) Sorted Merge Into

表有序,并且没有索引。

具体参考:

多表连接的三种方式详解 HASH JOIN MERGE JOINNESTED LOOP

http://www.doczj.com/doc/62e5280b4a7302768e99391d.html/tianlesoftware/article/details/5826546

二. 相关理论说明2.1 Oracle 优化器:CBO 和 RBOOracle的优化器有两种:

RBO(Rule-BasedOptimization):基于规则的优化器

CBO(Cost-BasedOptimization):基于代价的优化器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值