小仙我在学习索引执行行为的时候,有个疑惑?那就是索引是找到一个值就马上回表,然后再找下一个值,再回表。
比如索引唯一扫描,索引范围扫描,索引全扫描,索引快速扫描。好像都是要回表。尤其是范围,不范围完后,再回表呢?像下面的索引范围扫描
它不是把INDEX RANGE SCAN 执行完了后 再执行TABLE ACCESS BY INDEX ROWID。而是SCAN 一次,TABLE一次。这样要反复执行好多次,具体多少次,就看评估值Cardinatily 也就是ROW值。
而表连接是,是结果集的链接,换言之就是先把表要的数据找出来后,再跟后面的表关联。
那什么时候是一次一条数据,什么时候是一次全部数据呢?
这要看两个方面,
1 是操作方法;
2 是表连接方式;
所谓操作方法 就是上面说的过程。比如说INDEX RANGE SCAN 就是一次返回一条数据,然后执行第二方法,回表找具体数据。有的方法 TABLE ACCESS FULL 全表扫描 它就是一次返回全部符合条件的数据。
表连接方法,常见的有3种分别是
1 NESTED LOOPS
2 HASH JOIN
3 SORT JOIN MERGE JOIN
第一个是嵌套循环关联ÿ