`

使用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算法原理

    Hash join算法原理 详细讲述了oracle sql语句的连接方式 对于sql调优提高有很大帮助

    收获不止SQL优化

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

    oracle性能优化技巧

    ORACLE的优化器共有3种 ... 在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器

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

    数据库 我自己在 Java 中实现了 SortMergeJoin 和 HashJoin(来自 SQL 的著名 INNER JOIN)。 在更多信息。

    基于成本的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失效,这里请注意

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

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

    MySQL 8.0 新特性之哈希连接(Hash Join)

    例如,从 MySQL 8.0.18 开始以下查询可以使用 hash join 进行连接查询: SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1; Hash join 不需要索引的支持。大多数情况下,hash join 比之前的 Block Nested-Loop

    SQL性能优化

     USE_HASH(使用HASH JOIN方式联合)  索引提示:  INDEX(TABLE INDEX)(使用提示的表索引进行查询)  其它高级提示(如并行处理等等) 1.5 索引的规则: 建立索引常用的原则如下: 1. 表的主键、外键必须...

    Sql中的三种物理连接操作

    Sql中的三种物理连接操作 嵌套循环连接(Nested Loop Join) 合并连接(Merge Join) 哈希匹配(Hash Join)

    微软内部资料-SQL性能优化5

    Having useful indexes speeds up finding individual rows in a table, as well as finding the matching rows needed to join two tables. What You Will Learn After completing this lesson, you will be able ...

    精通SQL数据库连接.doc

    HASH JOIN会将一个表格和一个已经被执行的JOIN声明的结果连接在一起。JOIN HINT会导致数据库性能的极端低下并应留给DBA处理。 你的另一个选择是使用插入来控制JOIN的执行顺序,下面是使用实例,其中Catalog, Product...

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

    Join,HashJoin这三种物理连接中的一种。理解这三种物理连接是理解在表连接时解决性能问题的基础,下面我来对这三种连接的原理,适用场景进行描述。循环嵌套连接是最基本的连接,正如其名所示那样,需要进行循环嵌套,...

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

    MySQL 8.0.18 稳定版(GA)已于昨日正式发布,Hash Join 也如期而至。 快速浏览一下这个版本的亮点! 1.Hash Join Hash Join 不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。 2.EXPLAIN ...

    Mysql 8.0.18 hash join测试(推荐)

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

    SQL培训第一期

    1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query Language)简称SQL,是一种关系数据库查询语言,用于存取数据以及查询、更新和管理关系数据库系统。 1.2 语句结构 1.2.1 数据查询语言(DQL) 对数据库进行...

    oracle数据库优化辅助SQL语句

    具体详情请看下文代码分析。 --查询正在执行的SQL语句 ...LEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS AND A.SQL_HASH_VALUE = B.HASH_VALUE ORDER BY b.cpu_time DESC; --查询比较耗CPU的SQL语句 select

    微软内部资料-SQL性能优化3

    An intent lock indicates that SQL Server wants to acquire a shared (S) lock or exclusive (X) lock on some of the resources lower down in the hierarchy. For example, a shared intent lock placed at the ...

    ORACLE数据库DBA面试集锦

     hash join/merge join/nest loop(cluster join)/index join  2:不借助第三方工具,怎样查看sql的执行计划  set autot on  explain plan set statement_id = &item_id for &sql;  select * from table(dbms...

    DBA笔试题.wps

     hash join/merge join/nest loop(cluster join)/index join  2:不借助第三方工具,怎样查看sql的执行计划  set autot on  explain plan set statement_id = &item_id for &sql;  select * from table(dbms_...

Global site tag (gtag.js) - Google Analytics