暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL 语句访问路径 连接方式

原创 不吃草的牛_Nick 2022-06-17
760

访问路径是指 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)只能用于等值连接中


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论