访问路径是指 Oracle找到用户需要的数据的方法,这些方法包括
全表扫描(Fu| Table Scans)
rowid访问( Table Access by ROWID或 rowid lookup)
索引扫描( Index Scan或 zindex lookup)
根据索引的类型与 where限制条件的不同,有几种类型的索引扫描:
★ 索引唯一扫描 (index unique scan)
★ 索引范围扫描 (index range scan)
★ 索引全扫描 (index full scan)
★ 索引快速扫描 (index fast full scan)
★ 索引跳跃扫描 (INDEX SKIP SCAN)
★ 索引连接扫描 (index join)
Join操作基本分为3大类:外连接细分为:(左连接、右连接、全连接)、自然连接、内连接。
嵌套循环(Nested Loops ):简称NL
哈希连接(Hash Join ): 简称HJ
排序合并连接(Sort Merge Join ) :SMJ
Hash join的主要资源消耗在于CPU(在内存中创建临时的hash表,并进行hash计算而 merge join的资源消耗主要在于磁盘I/O(扫描表或索引)在并行系统中, hash join对CPU的消耗更加明显,所以在CPU紧张时,最好限制使用 hash join.
在绝大多数情况下, hash join效率比其他join方式效率更高
在Sort- Merge Join(SMJ),两张表的数据都需要先做排序,然后做 merge。因此效率相对最差;
Nested- Loop Join(NL)效率比SMJ更高。特别是当驱动表的数据量很大(集的势高)时。这样可以并行扫描内表。
Hash join效率最高,因为只要对两张表扫描一次
最后,总结一下,在哪种情况下用哪种连接方法比较好:
排序--合并连接( Sort Merge Join,SMJ):
a)对于非等值连接,这种连接方式的效率是比较高的。
b)如果在关联的列上都有索引,效果更好
c)对于将2个较大的 row source做连接,该连接方法比NL连接要好一些
d)但是如果 sort merge返回的 row source过大,则又会导致使用过多的 rowid在表中查询数据时,
数据库性能下降,因为过多的I/O
嵌套循环( Nested Loops,NL)
a)如果 driving row source(外部表)比较小,并且在 Inner row source(内部表)上有唯一索引,或有高选择性非唯一索引时,使用这种方法可以得到较好的效率。
b) NESTED LOOPS有其它连接方法没有的的一个优点是:可以先返回已经连接的行,而不必等待所有的连接操作处理
完才返回数据,这可以实现快速的响应时间
哈希连接( Hash Join,HJ)
a)这种方法是在 oracle7后来引入的,使用了比较先进的连接理论,一般来说,其效率应该好于其它2种连接,但是这种连接只能用在CBO优化器中,而且需要设置合适的 hash_area_size参数,才能取得较好的性能。
b)在2个较大的 row source之间连接时会取得相对较好的效率,在一个 row source较小时则能取得更好的效率
c)只能用于等值连接中




