读懂执行计划

执行计划
� SQL语句访问和处理数据的方式 

下面这张乱七八糟的图就是说,一条SQL语句从开始到结束可能要走好多条路。

执行计划--数据的访问

� 直接表的访问
– 并行
– 多数据块...
� 通过索引访问
– index unique scan
– index range scan
–index full scan
–index fast full scan
– index skip scan

执行计划---数据的处理

� order by
� group by
�count
� avg
�sum.....

执行计划---数据的关联处理

Nested loop join:从表里面拿出一条记录,把这条记录拿到另外一张表里面去扫。

Merge join:首先将两张表都排序,排序之后再做连接。这种机制效率不会太好,因为要对表的记录先排序。

Hash join:通常是大表和小表关联的时候hash join才有意义。通过hash函数将小表数据存储在内存当中,之后从大表里面取出数据通过hash过后的值定位去找数据。通常没有索引hash的效率会高一些。因为包括hash算法,使用这种机制对数据关联消耗cpu是较高的。
 

1.。

Access驱动,一般是两个字段的对比,filter是固定的值,而且是一次扫描多块再filter

• Access 谓词多用亍使用索引访问的场景。 所谓Access即是丌遍历全量的数据,而利用对应的查询条件 戒者约束来驱劢访问索引

• 过滤 谓词多用亍无法使用索引访问的场景, 例如步骤3 是在对整张表全表扫描的过程中,对亍每一条记 录做识别 看是否符合过滤相关的条件; 但是主要filter过滤并丌会真的是 物理读一个块然后就对里面的 记录做过滤,仍会一次物理读取多个块,之后逡辑读这些块并做逡辑过滤。 Filter 一般没有驱动作用。

2.

错误的执行顺序看法! 国内对亍执行计划执行顺序有一种错误的说法: 最右最上最先执行的原则

这个原则大体没有问题的 最右就是最缩进的,这个最好看出来,他基本最早执行的,但前提是和他同一竖排时上面的那个先执行。 顺序0 1 3 2,而不是3 2 1 0 ,3210这样好理解的

同在一个层次, 或者说缩进的最右最上最先执行,但号小的又要在这个前提之上先执行!!

通过上述验证 我们可以知道 最右最上最先执行的说法是错误的! Top RightMost不是指 最右最上,这个错误的观念可能来源于对文档的误读 最上最右才对 ^_^

Hash 0

table 1

 table 2

index 3

根据cost值,也可以知道执行计划的顺序,因为cost值是一步步加上去的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值