ORACLE sql相关笔记(一)

共享池是oracle缓存程序数据的地方。执行过的每一句SQL语句在共享池都存在解析后的内容。共享池中存储这些语句的地方 称之为library cache

执行语句被解析并载入library cache,解析包括验证语法、检验对象以及确认对象的用户权限。

如果sql语句曾执行过,oracle将取回之前解析的信息重用,这种类型被称为soft解析;如果没执行过,那么oracle将为该语句生成执行计划,并 存在缓存中以备重用,这种类型被称为hard解析

通过查询v$sql视图查看当前存放在library cache中的语句,该视图列出了共享sql区域的统计信息。

缓冲区缓存是SGA最大的部分之一,在数据库块从硬盘中读取后或写入硬盘之前,它用来存储数据库块。

类似于共享池,在验证数据块是否在缓冲区缓存中以及更新LRU信息和接触计数的时候都必须获得锁存器。因此,sql语句在获取能够满足查询需要的数据行访问尽可能少的数据块,有助于oracle使用较少的锁存器(latch)

执行一句数据块不在缓冲区缓存中的查询会需要oracle访问操作系统以获取这些块,然后在将结果集返回给你之前把他们 放入缓冲区缓存中。当oracle确定一个数据块已经在缓冲区缓存中的时候,这样的访问被认为是一次逻辑读 如果该块必须从磁盘中获取,则被认为是物理读

查询通过了语法和权限检查之后,查询就进入了转换为一系列查询块的转换阶段。查询转换的主要目的就是确认如果改变查询的写法 会不会提供更好的查询计划。查询转换不改变最终的结果集。

常见的查询转换有视图合并、子查询解嵌套、谓词前推和使用物化视图进行查询重写。

当发生硬解析的时候,oracle将会确定哪个执行计划对于该查询是最优的。而确定执行计划最关键的是统计信息是否准确。

优化器位于所有你写的sql语句的核心位置。

在确定sql语句的执行计划的时候,首先确定查询中所用到的表访问方法(索引扫描或全表扫描),选定访问方法后,选择联结方法对表进行逐对联结。

全表扫描最多读取到位于表中高水位线的数据块。高水位线标出了表中最后一块有数据写入的数据块。删除数据是不影响高水位线的, 以至于可能会读取实际为空的数据块。对于频繁加载和删除的表,响应时间可能会变慢。

索引扫描类型包括索引范围扫描、索引唯一扫描、索引全扫描、索引跳跃扫描以及索引快速全扫描。

索引的clustering factor是非常重要的索引统计信息,帮助优化器生成使用索引的成本信息。向优化器表明了具有同样索引值的数据行 是不是存放在连续的一系列数据块中,或是否被分散存放在表的多个数据块中。

INDEX UNIQUE SCAN:当谓词中包含使用UNIQUE或者PRIMARY KEY的列作为条件的时候就会选用索引唯一扫描;
INDEX RANGE SCAN:当谓词中包含条件将返回结果是一定范围的数据的时,就会选用索引范围扫描。索引可以是唯一或者不唯一的;
INDEX FULL SCAN:索引全扫描;索引列是否有非空约束决定了是索引全扫还是全表扫描;
INDEX SKIP SCAN:当谓词中包含位于索引中非引导列上条件,并且引导列的值是唯一的时候。通过逻辑上将多个列的索引分解为多个较小的子索引 来实现,子索引的数目由索引引导列中唯一值的个数决定。

当在FROM子句中存在多张表时,联结的方法有:嵌套循环联结、散列联结、排序-合并联结以及笛卡尔联结。

联结所访问的第一张表通常被称为驱动表(the driving table),优化器通过使用统计信息和where字句计算每个表返回的行数据来确定 哪张表是驱动表。预估大小最小的表通常被作为驱动表。

NESTED LOOPS运算后所列出的第一个表是驱动表,这种联结是个嵌套双层循环,首先对驱动表进行全表扫描,通过外层条件筛选后的数据行根据匹配条件逐行再去匹配内层表,如果用来联结的列上建有索引的话,这种联结的效率是比较高的。

HASH JOINS首先应用where子句筛选并读取要进行联结的两个表。基于表和索引的统计信息,被确定为返回最少行数的表被完全散列化到内存中。 然后读取另外一张较大的表并对 联结键 应用散列函数 进行匹配。较大的表时驱动表,仅读取一次,检查其中的每一行来寻找匹配;较小的散列表 被多次读取。在执行计划中,较小的散列表放在前面而较大的探测表放在后面。

HASH JOIN和Sort Merge Join访问数据的方式类似。相对于Nested Loops逻辑读取会比较少,因为数据块仅被读取一次就存放到内存中。 HASH JOIN只有在相同联结的情况下才能进行。而Sort Merge Join可以处理特定的非等式的条件。

外连接可以与任何联结方法(HASH JOIN,NESTED LOOPS,Sort Merge Join)一起使用,例如NESTED LOOPS OUTER。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26770925/viewspace-1365960/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26770925/viewspace-1365960/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值