oracle怎么改账号密码Oracle学习总结第二章sql执行

oracle 将内存分为 系统全局内存区域SGA 进程全局内存区域PGA两个区域

今天看了 SGA的两个区域,1库高速缓存 2数据库高速缓存

1库高速缓存

oracle账号前者是存放解析后的sql语句—语句解析的时候应当考虑到解析后的代码复用性,解析的时候源编码少许不同会导致重新解析,所以要多运用变量,让语句统一。

2数据库高速缓存

后者是存放从硬盘中读取出来的数据库块信息,如果代码被多次执行,存取的数据也就会多次复用,就能提高执行效率,减少物理存取,增加逻辑存取。

在真正的运行对比中

语句解析过,数据库高速缓存有内容的 执行速度 >>>远远大于>>>> 没有解析过需要物理存取的语句。 如果清空了高速缓存里面的内容 会增加物理读取数据库的时间。

在oracle中会对语句进行优化。

常用的方式就是查询转换

通过以下方式执行

视图合并 —将from后的子查询试图 中的表与外表合并

子查询解嵌套 —将where后的子查询中的表与外表合并

谓语前推 —将外查询的谓语(条件)放入到内查询中,减少了查询的量 (对于这个我不是很理解,这样不是会改变自己查询的结果么。望大神回复)

物化视图查询重写 —物化视图就是将视图查询保存下来,以后进行相同查询调用试图就好了。

这里有个小知识点,在sql中用了rownum这个参数后,会导致试图合并谓语前推失效,相当于加入了hint NO_MERGE NO_PUSH_PRED

执行的时候要注意一些细节, 选择比就是很重要的一个方面

select × from car_purchases where manufacturer = 'ford' and make = 'focus'

这里有1,000,000条信息 有4个厂商,1000个产品,

选择的时候就是1/4*1/1000 = 0.00025

而一个产品一般只有一个厂家生产

这样改变一下select × from car_purchases where make = 'focus'

选择比就变成了0.001

将大大影响语句的执行效率。

最后一个点就是网络传输方面

如果数据量大的话,提高单次发送的大小也很大程度上影响到了数据库的执行效率。

欢迎大神提出见解一起探讨。

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。