`
lyjilu
  • 浏览: 174561 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

nested loop比hash join慢

阅读更多

今天遇见个诡异为题,情况是这样的

我有一个sql,在分页查询 为20条的时候,查询结果为100多ms,但是当分页查询为10条时,执行时间多达4000ms,最后通过执行计划发现,唯一差别是:

10条时,使用的是nested loop;

20条时,用的是hash join;

最后只有强制oracle使用 hash join。具体 nested loop与hash join区别就不多说了

 

/*+ USE_HASH(t,u) */

 解决了此问题 其中t和u分别是视图名或子查询的别名。sql类似如下

 

 

 

select b.*
  from (select a.*, rownum as rownumA
          from (
          
                select /*+ USE_HASH(t,u) */
                 u.name, t.name, t.aNums
                  from (select count(a) as aNums, s.name, s.uid
                           from sur s
                          group by s.name, s.uid) t
                 inner join v_user u
                    on u.id = t.uid

                    ) a
         where rownum <= 10
        ) b
 where rownumA >= 1

 

 

开始把USE_HASH(t,u) 加到最外层select后面,结果不行。必须加到关联查询数据的 select后

分享到:
评论

相关推荐

    MySQL中Nested-Loop Join算法小结

    MySQL中的Nested-Loop Join(NLJ)是一种基本的JOIN操作实现方式,主要用于处理两个或多个表之间的连接。NLJ的基本思想是逐行遍历一张表(称为外部表),然后对每一行与另一张表(称为内部表)进行匹配。这个过程...

    hash join 原理和算法

    如果Hash Join的成本低于其他类型的Join操作,比如Nested Loop或Sort Merge Join,那么CBO会选择Hash Join。 总结来说,Hash Join是一种高效的连接操作方法,尤其适用于大型数据集。它通过构建哈希表和分区策略来...

    hash join算法

    相对于 Nested Loop Join,Hash Join 更适合处理大型结果集。Hash Join 不需要在驱动表上存在索引。 Hash Join 算法的基本思想是根据小的 row sources(称作 build input)建立一个可以存在于 Hash Area 内存中的 ...

    hash join算法原理

    不同于Nested Loop Join,Hash Join不依赖于驱动表上的索引。 一、Hash Join 概念 Hash Join的基本流程是:首先,选择较小的表(称为Build Input,记为S)构建一个Hash Table存储在内存的Hash Area中。如果Hash ...

    Hash join算法原理

    相比Nested Loop Join,Hash Join 在处理大规模数据时更具有优势,因为它不需要在驱动表上建立索引。 Hash Join 的工作原理分为两个主要步骤:构建和探测。首先,较小的表(称为 build input 或者 S)被加载到内存...

    转--一次HASH JOIN 临时表空间不足的分析和优化思路

    1. **查询优化**:检查SQL语句,尝试使用其他类型的JOIN,如Nested Loop JOIN或Merge JOIN,它们可能对内存需求较小。同时,考虑是否可以通过添加索引、减少JOIN条件或使用子查询来降低数据量。 2. **内存调整**:...

    Sql中的三种物理连接操作

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

    MySQL JOIN 工作原理浅析1

    本文将对 MySQL 中的 JOIN 工作原理进行浅析,包括 Nested Loop Join 和 Hash Join 两种连接算法的工作原理、优缺点及应用场景。 1. Nested Loop Join Nested Loop Join 是一种基于循环的连接算法,工作原理如图所...

    Oracle表连接方式

    根据不同的数据集和查询需求,Oracle提供了多种表连接方式,包括NESTED LOOP、HASH JOIN和SORT MERGE JOIN等。 NESTED LOOP NESTED LOOP是一种基本的表连接方式,适用于被连接的数据子集较小的情况。在nested loop...

    oracle表的连接方式

    Oracle提供了三种主要的表连接方式:NESTED LOOP JOIN、HASH JOIN和SORT MERGE JOIN。每种方法都有其独特的应用场景和性能特点。 #### NESTED LOOP JOIN NESTED LOOP JOIN是一种简单的连接方式,适用于连接的数据...

    Oracle CBO 学习笔记之(1) : 深入理解Oracle Hash Join的代价模型及其执行流程

    同时,理解何时Hash Join比其他类型的JOIN(如Nested Loop Join或Sort Merge Join)更适合,也是提升SQL性能的重要一环。 总之,Oracle CBO的Hash Join是数据库优化的关键技术之一,通过深入理解其代价模型和执行...

    Mysql 8.0.18 hash join测试(推荐)

    MySQL 8.0.18 引入了 Hash Join,这是一种新的联接算法,它无需依赖索引,但在很多情况下比传统的Block Nested Loop (BNL) 算法更为高效。Hash Join 的工作原理是通过将一个表的数据构建成哈希表,然后使用另一个表...

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

    这意味着,如果你的查询语句中包含了这些类型的连接,MySQL 将不会使用Hash Join,而是可能回退到其他连接策略,如Nested Loop 或 Merge Join。这对于依赖于这些连接类型的复杂查询来说,可能会带来性能上的影响。 ...

    Oracle中hash join研究.pdf

    哈希连接(Hash Join)是Oracle数据库中的一种高效连接方法,主要针对等值连接操作,其引入旨在解决嵌套循环连接(Nested Loop Join)中的大量随机读取问题以及排序合并连接(Sort-Merge Join)中的排序成本过高问题...

    数据库管理系统概述英文版课件: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)。...

    Oracle的分页查询语句.docx

    对 于多表联合查询,Oracle 可以使用 NESTED LOOP 和 HASH JOIN 两种连接方式。其中,NESTED LOOP 在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而 HASH JOIN 必须处理完所有结果集。因此,在大部分...

    基于分布式系统OceanBase的并行连接.pdf

    OceanBase系统中执行的主要join算法包括nested loop join、hash join和semi-join。这些算法各有优劣,适用的场景和效率也有所不同。 nested loop join是一种基本的join算法,它通过遍历一个表的所有行,并对另一个...

    chapter15 实践习题2

    该练习考察了不同类型的连接操作(Nested Loop Join, Block Nested Loop Join, Merge Join, Hash Join)在不同内存大小(M)条件下的磁盘访问次数。计算了每种连接方法所需的磁盘访问次数,并考虑了内外层关系的交换...

Global site tag (gtag.js) - Google Analytics