`
zzhonghe
  • 浏览: 248243 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

嵌套join和HashJoin以及Hash索引

    博客分类:
  • DB
 
阅读更多
嵌套join和Hash Join

首先谈谈Join的方式,不同的数据库有不同的Join方式,比如Mysql就只支持嵌套Join, 而Oracle在默认情况下是嵌套Join,而在显示的语句下,或者是Join没有索引的情况下,就会使用HashJoin.


示例语句:

select a.xx,b.xxx from a, b where a.id=b.parentId  

有两个表a和b, 现在要通过a.id和b.parentId进行join.


在嵌套Join的情况下,假设两个表上都有索引:

首先拿出a表的一条记录,取得id的值, 用这个id值,通过索引找到b表中所有的parentId和这个id值的行数,并返回记录。接下来再拿出下一条记录,再取id,再去b找对应记录。



而Hash Join的情形:

首先把a表的id,全部拿出来,对所有id都取hash值,并保存在内存中。 然后B表,对所有记录,都拿出parentId做hash值,每做一个,就用这个hash值去内存中看是否有相同的值存在,如果有,那么就返回这条记录作为结果集的一部分。



由此可见,在正常情况下,有索引,嵌套的方式可以很快定位到b表的记录, 相比之下速度要比Hash Join要好。而没有索引的情况下,就需要对b表挨条扫,速度会很慢。 所以Oracle会在这种情况下切换到Hash Join的方式。


-----------------------------------------

Hash索引

Hash索引是相对于其他类型的索引,如B-Tree索引而言的。 如果在a.id上建立Hash索引,那么他会对所有id算hash值,并把hash值和磁盘地址一起保存起来。 当要查id=34343的时候,  对34343进行hash转换,然后迅速找到磁盘地址,取到记


录。 而不是像BTree一样,一段一段地比较,然后定位。  速度要快很多。

但是它的弱点就很明显,只能查单条,不能查范围。 比如 a.id<34343, 那么他就只能扫描全表。











分享到:
评论

相关推荐

    数据库管理系统概述英文版课件:12 Join Algorithm.ppt

    包括简单嵌套循环Join(Simple-Nested Loop Join)、块嵌套循环Join(Block-Nested Loop Join)、排序合并Join(Sort-Merge Join)、索引嵌套循环Join(Index-Nested Loop Join)以及哈希Join(Hash Join)。...

    MySQL 8.0.18 Hash Join不支持left/right join左右连接问题

    在MySQL 8.0.18中,增加了Hash Join新功能,它适用于未创建索引的字段,做等值关联查询。在之前的版本里,如果连接的字段没有创建索引,查询速度会是非常慢的,优化器会采用BNL(块嵌套)算法。 Hash Join算法是把...

    为什么oracle有时不用索引来查找数据

    3. **连接类型**:Oracle支持三种连接方式:排序合并连接(Sort Merge Join, SMJ)、哈希连接(Hash Join, HJ)和嵌套循环连接(Nested Loop Join, NL)。在两张表连接时,只有嵌套循环连接能够在内表的目标列上有效...

    DB2嵌套循环

    在数据库管理领域,DB2是一个广泛使用的高性能关系型数据库系统,...在实际工作中,需要根据业务需求和数据规模,灵活选择合适的连接方法,如哈希连接(Hash JOIN)或归并连接(Merge JOIN),以实现更高效的查询处理。

    Oracle中三种表连接算法的总结

    Oracle数据库在处理表之间的连接操作时,提供了三种主要的连接算法:嵌套循环连接(Nested Loop Join)、排序合并连接(Sort Merge Join)和哈希连接(Hash Join)。这些算法各有特点,适用于不同的数据处理场景。 ...

    MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

    Hash索引适用于等值查询;R-Tree适用于空间数据;Full-text索引则用于全文搜索。创建和使用正确的索引能显著提升查询性能,但过多的索引可能会增加写操作的开销,因此需权衡使用。 理解了这些基本概念后,我们可以...

    Oracle数据库3种主要表连接方式对比

    本文将详细介绍三种主要的表连接方式:嵌套循环连接(Nested Loop Join,简称NL Join)、排序合并连接(Sort Merge Join,简称SM Join)以及散列连接(Hash Join)。我们将探讨它们的特点、优势与劣势,以便于在实际...

    浅谈SQLServer中的三种物理连接操作

    在SQL Server中,数据库执行引擎会根据查询语句的特点,将常见的Inner Join和Outer Join转换成三种物理连接操作:Loop Join、Merge Join和Hash Join。理解这三种连接方式的原理和适用场景对于优化SQL查询性能至关...

    数据库2021第5次作业答案1

    (a) 对于R ⋈S,最佳算法可能是Nested Loop Join(嵌套循环连接),因为没有索引且数据未排序,这通常是最简单的实现方式。 (b) NLJ的I/O代价取决于R和S的大小,需要读取R的所有块以及与之匹配的S的块。 (c) 如果R...

    行业-90 再次重温写出各种SQL语句的时候,会用什么执行计划?(3).rar

    3. JOIN操作:包括嵌套循环JOIN(Nested Loop JOIN)、合并JOIN(Merge JOIN)、哈希JOIN(Hash JOIN),每种JOIN方法适用于不同的数据量和关系复杂度。 4. 排序和分组:ORDER BY和GROUP BY操作可能导致额外的排序和...

    oracle性能优化技巧

    - 在复杂的查询中,避免嵌套循环结构,因为它们会导致大量的数据读取和处理开销。 10. **别名的使用**: - 为表和列使用别名可以提高查询的可读性,并且在某些情况下还可以提高性能。 11. **EXISTS与IN的比较**...

    SQL Server索引基础知识.pdf

    - **Hash Match Join**: 使用哈希表来存储一个表中的行,然后扫描另一个表以查找匹配项。这种方法在处理大数据集时通常比嵌套循环连接更快。 - **Merge Join**: 在连接之前先对两个表进行排序,然后从两个已排序的表...

    关于Oracle的SQL性能调整.pdf

    表连接的方式多样,如哈希连接(Hash Join)、嵌套循环连接(Nested Loop Join)和排序合并连接(Sort Merge Join),每种连接方式有其特定的适用场景。DBA需根据实际情况进行优化选择,这个过程可能较为耗时,因为...

    Mysql 8.0.18 hash join测试(推荐)

    Hash Join 不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。 下面通过实例代码给大家介绍Mysql 8.0.18 hash join测试,具体内容如下所示: CREATE TABLE COLUMNS_hj as select * from ...

    数据库第九章1

    代数优化是通过等价变换来简化和优化关系代数表达式,而物理优化则涉及到具体的数据访问路径和操作算法的选择,例如选择使用B+树索引或Hash索引进行选择操作,或者使用嵌套循环、排序-合并、索引连接或Hash join算法...

    MySQL 8.0.18 稳定版发布! Hash Join如期而至

    对于想要学习如何安装和配置MySQL 8.0.18的用户,可以参考相关链接中提供的图文教程,覆盖了Windows、Linux、MacOS等不同平台的操作步骤,还有关于Java连接MySQL 8.0.18的指南,以及Hash Join的实际应用测试教程。...

    mysql索引及性能优化 (1).pdf

    通过对索引原理的理解和正确应用,结合SQL语句的优化以及合理的数据库设计和系统架构调整,可以有效地解决数据库性能问题。此外,根据具体的应用场景选择合适的存储引擎也是提高性能的关键因素之一。通过以上介绍的...

    sqlserver中的执行单元

    在SQL Server中,JOIN操作有多种实现方式,包括嵌套循环JOIN(nested loop join)、合并JOIN(merge join)和哈希JOIN(hash join)。嵌套循环JOIN是最基础的一种,尤其适用于小表与大表的连接。当在较小的表(inner input...

    Sql中的三种物理连接操作

    在SQL中,数据库管理系统在处理表间的连接时通常会使用三种物理连接操作:嵌套循环连接(Nested Loop Join)、合并连接(Merge Join)和哈希匹配(Hash Join)。理解这三种连接方式对于优化SQL查询性能至关重要。 ...

    85提纲挈领的告诉你,SQL语句的执行计划和性能优化有什么关系?.pdf

    - 对于多表连接的查询,执行计划会说明是使用何种类型的JOIN算法(如Nested Loop、Hash Join等)。 6. 函数的使用 - 如果SQL语句中包含函数,执行计划将体现这些函数对查询性能的影响。 三、性能优化的实践 1. ...

Global site tag (gtag.js) - Google Analytics