9 join方法--优化主题系列

出个题目:在一个高并发环境下SQL优化重要不??为什么??

假设在没有并发的情况下一个SQL逻辑读是1000 并不大对吧

假设现在有50个并发是不是很容易产生CR block??而且很多个??

此时是不是有可能50个并发会修改1000block中的500block??

此时的逻辑读是不是由1000变成几万了??况且仅仅是一个SQL

50个并发没提交只能从UNDO里面读数据现在修改了500个块50*500+500

也就是说在高并发的环境下 SQL优化非常重要

高并发环境下逻辑读可能是普通情况下的10倍以上

 

同一个时刻能不能3个表进行JOIN??

 

(结果集)与表(结果集)之间的连接方式非常重要,如果CBO选择了错误的连接方式,本来几秒就能出结果的SQL可能跑一天都跑不完。如果想要快速定位超大型SQL性能问题,就必须深入理解表连接方式。在多表JOIN的时候,只能是2个表先JOINJOIN之后的结果再和其他表/结果集关联,也就是说任何时候都是只能2个表在做JOIN


什么情况下不走NL??

首先HASH JOIN是不是都只扫描1次??

HASH JOIN被驱动表只扫描一次??

假设被驱动表 10GB 多块读16 块大小8KB 要进行多少次I/O能读完??

如果FULLTABLE ACCESS??

10*1024*1024/16/8=8W 多次I/O 对不对??

现在我们来走NL 是不是要走索引??

走索引扫描的I/O次数小于8WNL就合适如果超过8W就错了

但是走 NL是单块读

假设索引的块里面存放100条一个块高度是38W*100/2 是不是也很大??

 

带着如上疑问,下面分章节介绍

普通连接:嵌套循环(NESTEDLOOP)、哈希连接(HASHJOIN)、排序合并连接(SORTMERGE JOIN)

特殊连接:笛卡尔积(CARTESIAN)、外连接(hashjoin outer)、半连接(semi-join)、反连接(anti-join)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值