网站弹出广告的是怎么做的,2023年中国500强企业,盐城网站建设首选梦搏网络,股票发行ipo和seo是什么意思小仙我在学习索引执行行为的时候#xff0c;有个疑惑#xff1f;那就是索引是找到一个值就马上回表#xff0c;然后再找下一个值#xff0c;再回表。比如索引唯一扫描#xff0c;索引范围扫描#xff0c;索引全扫描#xff0c;索引快速扫描。好像都是要回表。尤其是范围…小仙我在学习索引执行行为的时候有个疑惑那就是索引是找到一个值就马上回表然后再找下一个值再回表。比如索引唯一扫描索引范围扫描索引全扫描索引快速扫描。好像都是要回表。尤其是范围不范围完后再回表呢像下面的索引范围扫描它不是把INDEX RANGE SCAN 执行完了后 再执行TABLE ACCESS BY INDEX ROWID。而是SCAN 一次TABLE一次。这样要反复执行好多次具体多少次就看评估值Cardinatily 也就是ROW值。而表连接是是结果集的链接换言之就是先把表要的数据找出来后再跟后面的表关联。那什么时候是一次一条数据什么时候是一次全部数据呢这要看两个方面1 是操作方法2 是表连接方式所谓操作方法 就是上面说的过程。比如说INDEX RANGE SCAN 就是一次返回一条数据然后执行第二方法回表找具体数据。有的方法 TABLE ACCESS FULL 全表扫描 它就是一次返回全部符合条件的数据。表连接方法常见的有3种分别是1 NESTED LOOPS2 HASH JOIN3 SORT JOIN MERGE JOIN第一个是嵌套循环关联第二个是HASH第三个SORT 排序。第一个链接 类似于JAVA开发当中的 双循环for a (i1;i;i1000){xy*z;for b( h1;h; h10){ox*100;}}先执行XY*Z 然后再执行内循环外循环执行1000次而内循环要执行10次外乘以外循环次数 10*100010000次。这图没有表现我要说的我大致画一下NESTED LOOPSTABLE ACCESS BY INDEX ROWIDINDEX RANGE SCANTABLE ACCESS FULL这样的执行计划NESTED LOOPS 不会等 外循环返回所有数据后去执行内循环 也就是TABLE ACCESS FULL。而是外循环返回1条记录就执行一次内循环。而要是外循环是TABLE ACCESS FULL 那就必须等待外循环找完全部数据后才执行内循环。所以这个NESTED LOOPS 是受到具体执行方法的影响。另外两种不受影响。OBA常用术语叫驱动表它就是指外循环也就是先被执行的表一般都是兄长级别的表。另外两个链接也是兄长级别当驱动表。所以 驱动表 必须是小表确切地说是返回结果集小的也就是返回行数最少的。否则向上面的双循环列子样外循环要执行1000次而内循环执行10次可内循环被外循环强制执行了1万次。你要是说颠倒过来内循环还是要执行1万次。可是总体来说是10次1万次而不颠倒过来是1000次1万次。多了990次。另外谈个顺序在很多表关联的SQL中表与表之间的关联是单向的第一个表与第二个表关联后形成了结果集保存在PGA的数据。然后再跟第三个表关联再形成结果集保留在PGA里接着跟第4个表关联。而不是第1个表与第2个表关联形成结果集1然后第3个表与第4个表关联形成结果集2最后结果集1和结果集2关联。执行计划不能被并行执行。NESTED LOOPS 是两个表等值关联返回少量数据HASH JOIN 是两个表等值关联返回大量数据HASH JOIN 会选择返回数据较少的表把表的SELECT列和JOIN列放入PGA中然后对另外个表的JOIN列进行HASH取值然后再跟PGA的驱动表JOIN列进行匹配关联。SORT MEGER JOIN 处理两个表非等值关联 ,,.先对两个表根据JOIN列进行排序选择数据较小的表作为驱动表然后跟排好序的另外个表进行匹配。驱动表返回多少行另外个表就要匹配多少次。SELECT STATEMENTMERGE JOINTABLE ACCESS BY INDEX ROWIDINDEX RANGE SCANSORT JOINTABLE ACCESS FULL并且两个表的数据都要放进内存PGA进行匹配如果内存放不下就放到磁盘上。所以这里全部数据提到内存进行匹配, 不受INDEX RANGE SCAN 单行的影响。CARTESIAN JOIN 笛卡尔 这是两个表没有连接列造成的。MEGER JOIN CARTESIAN 也是笛卡尔.SEMI JOIN 叫做半连接 两个表关联只返回1个表的数据一般都是IN和EXISTS。会出现 MERGE JOIN SEMI,NESTEDLOOPS SEMI的执行方法。都属于半连接。ANTI JOIN 是反连接。是NOT IN,NOT EXISTS执行计划的方法名字带有ANTI 就是反连接表现有 MERGE JOIN ANTI NA;NESTED LOOPS ANTIFILTER 连接 FILTER这个字眼在执行计划有两个意思1个就是过滤另外一个是关联类似于NESTED LOOPS。主要看FILTER下面是否有两个以上的儿子(后代)。为啥不直接用NESTED LOOPS 表示呢因为FILTER告诉你 其中子查询没有被展开。