阅读《SQL优化核心思想》第4章 访问路径(ACCESS PATH) 笔记
访问路径值得是通过哪种扫描方式获取数据。常见的访问路径有
一、TABLE ACCESS FULL
表示全表扫描,一般是多块读,HINT:FULL(表名/别名)
Oracle里最小的存储单位是块(Block),物理上连续的块组成了区(extent),区又组成了段(segment),因为区里面的数据块在物理上是连续的,所以全面扫描可以多块读。
注:
1、如果表中有clob字段,clob会单独存放在一个段中,当全表扫描到clob字段时,性能会严重下降,这时可以考虑字段拆分成多个varchar2(4000),或存放在nosql数据库中
2、如果表中部分块已经缓存在buffer cache中,在进行全表扫描的时候,扫描到已经被缓存的块所在区时,就会引起I/O中断,如果一个表不同的区又大量块还存在buffer cache中,全表扫描性能会严重下降。
二、TABLE ACCESS BY USER ROWID
表示直接用ROWID获取数据,单块读。
这种访问路径是Oracle所有访问路径中性能最好的
三、TABLE ACCESS BY ROWID RANGE
表示ROWID范围扫描,多块读。
因为同一个块里的ROWID是连续的,同一个EXTENT里面的ROWID也是连续的,所以可以多块读。
四、TABLE ACCESS BY INDEX ROWID