`

使用hash join 优化 sql

阅读更多
低效:
SELECT a.*,
       b.object_name
  FROM TEST_OBJECT a,
       TEST_OBJ1   b
 WHERE SUBSTR(a.object_name, 1, LENGTH(b.object_name)) = b.object_name;

実行計画
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=26 Card=67 Bytes=2077)
   1    0   NESTED LOOPS (Cost=26 Card=67 Bytes=2077)
   2    1     TABLE ACCESS (FULL) OF 'TEST_OBJECT' (TABLE) (Cost=2 Card=82 Bytes=1558)
   3    1     TABLE ACCESS (FULL) OF 'TEST_OBJ1' (TABLE) (Cost=0 Card=1 Bytes=12)

高效:
SELECT a.*,
       b.object_name
  FROM TEST_OBJECT a,
       TEST_OBJ1   b
 WHERE 
   SUBSTR(a.object_name, 1, LENGTH(b.object_name)) = b.object_name
   SUBSTR(a.object_name, 1, 4) = SUBSTR(b.object_name, 1, 4)--hash join
   AND LENGTH(b.object_name) > 3
UNION ALL
SELECT a.*,
       b.object_name
  FROM TEST_OBJECT a,
       TEST_OBJ1   b
 WHERE SUBSTR(a.object_name, 1, LENGTH(b.object_name)) = b.object_name
   AND LENGTH(b.object_name) < 4;

実行計画
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=10 Card=4 Bytes=124)
   1    0   UNION-ALL
   2    1     HASH JOIN (Cost=5 Card=1 Bytes=31)
   3    2       TABLE ACCESS (FULL) OF 'TEST_OBJ1' (TABLE) (Cost=2 Card=4 Bytes=48)
   4    2       TABLE ACCESS (FULL) OF 'TEST_OBJECT' (TABLE) (Cost=2 Card=82 Bytes=1558)
   5    1     NESTED LOOPS (Cost=5 Card=3 Bytes=93)
   6    5       TABLE ACCESS (FULL) OF 'TEST_OBJ1' (TABLE) (Cost=2 Card=4 Bytes=48)
   7    5       TABLE ACCESS (FULL) OF 'TEST_OBJECT' (TABLE) (Cost=1 Card=1 Bytes=19)

分享到:
评论

相关推荐

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

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

    Hash join算法原理

    总的来说,Hash Join 算法是 Oracle SQL 优化和调优的关键工具之一,尤其在处理大型数据集时。理解其工作原理和优化策略,可以帮助数据库管理员和开发人员编写更高效、更优化的 SQL 查询,从而提升系统性能。在实际...

    tud-db:我自己在 Java 中实现 SortMergeJoin 和 HashJoin(来自 SQL 的著名 INNER JOIN)

    通过实现SortMergeJoin和HashJoin,你可以在Java环境中模拟SQL的INNER JOIN操作,这对于理解和优化数据库查询性能具有重要意义。在实际应用中,可以根据数据规模、内存资源和特定场景来选择适合的JOIN算法。

    收获不止SQL优化

    第2章 风驰电掣——有效缩短SQL优化过程 24 2.1 SQL调优时间都去哪儿了 25 2.1.1 不善于批处理频频忙交互 25 2.1.2 无法抓住主要矛盾瞎折腾 25 2.1.3 未能明确需求目标白费劲 26 2.1.4 没有分析操作难度乱调优...

    通过分析SQL语句的执行计划优化SQL总结)

    2. **连接操作**:如果使用了嵌套循环连接(Nested Loop Join)且数据量大,可考虑改为更高效的连接方法,如哈希连接(Hash Join)或合并连接(Merge Join)。 3. **排序与分组**:对大量数据进行排序或分组可能会...

    oracle性能优化技巧

    - 当使用选择性优化器时,数据库会根据表是否已经被`ANALYZE`过,来决定是使用基于规则还是基于成本的优化策略。如果表已经被`ANALYZE`过,则自动采用基于成本的优化器;反之,则采用基于规则的优化器。 - 为了...

    SQL优化 SQL优化

    SQL优化涉及到查询语句的编写、索引的使用、数据访问路径的选择等多个方面,旨在减少查询时间、降低资源消耗,从而提升系统整体的响应速度和用户体验。下面我们将深入探讨SQL优化的多个重要知识点。 1. **优化查询...

    通过分析SQL语句的执行计划优化SQL(九)

    在SQL查询优化中,理解如何有效地处理JOIN操作至关重要,因为JOIN是将多个数据源整合在一起的关键操作。在本文中,我们将深入探讨通过分析SQL语句的执行计划来优化JOIN的方法,特别是关注JOIN过程中的顺序和连接类型...

    Oracle SQL 优化与调优技术详解-附录:SQL提示

    本文将详细介绍Oracle SQL中的“提示”(HINT)技术,这是Oracle SQL优化中使用的一项辅助手段,通过为查询提供额外的优化指导,帮助优化器生成更好的执行计划。 在开始讨论具体的SQL提示之前,我们先来理解什么是...

    mysql的sql优化

    SQL优化主要涉及查询效率、索引使用、查询语句结构优化等多个方面。 首先,理解SQL执行原理是优化的基础。MySQL采用解析、优化、执行三个步骤来处理SQL语句。解析阶段会检查语法和权限;优化阶段会选择最佳的执行...

    基于成本的Spark SQL优化器框架

    通过可靠的统计和精确的估算,我们能够在这些领域做出好的决定:选择散列连接(hash join)操作的正确构建端(build side),选择正确的连接算法(如broadcast hash join与 shuffled hash join), 调整连接的顺序...

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

    在MySQL 8.0.18中,增加了Hash Join新功能,它适用于未创建索引的字段,...我们用explain format=tree命令可以查看到已经使用到hash join算法。 但目前8.0.18版本,仅支持join。left join和right join失效,这里请注意

    sqlserver2000优化(必须的)

    SQL Server 2000作为一款广泛使用的数据库管理系统,其优化不仅能够提升查询速度,减少资源消耗,还能增强系统的稳定性和安全性。特别是对于高负载环境,有效的优化策略能够显著改善用户体验,提高企业业务的运行...

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

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

    Hash Join功能开发文档1

    例如,用户可以通过在Hint中指定"join(hash_join, merge_join, hash_join, merge_join)"来指定不同表对之间应使用的连接类型。解析器需要能够识别并处理这些特殊的语法。 - **生成逻辑计划子模块**:这个模块根据...

    SQL优化指导示例2.pdf

    根据提供的文件内容,我们可以了解到文档《SQL优化指导示例2.pdf》主要讨论了在Vertica数据库系统中如何进行SQL语句的优化。Vertica是一个面向列的高性能分析数据库,特别适合于处理大规模数据集。本文的知识点涉及...

    收获,不止SQL优化--抓住SQL的本质

    第2章 风驰电掣——有效缩短SQL优化过程 24 2.1 SQL调优时间都去哪儿了 25 2.1.1 不善于批处理频频忙交互 25 2.1.2 无法抓住主要矛盾瞎折腾 25 2.1.3 未能明确需求目标白费劲 26 2.1.4 没有分析操作难度乱调优...

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

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

    ORACLE+SQL效率优化.rar

    2. **查询优化**:避免使用子查询,尽量用连接(JOIN)操作替代。子查询可能引发多次数据访问,而连接可以通过一次遍历完成。同时,尽量减少对大型表的全表扫描,利用索引来定位数据。 3. **谓词位置**:在WHERE...

Global site tag (gtag.js) - Google Analytics