低效:
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算法原理 详细讲述了oracle 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的优化器共有3种 ... 在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器
数据库 我自己在 Java 中实现了 SortMergeJoin 和 HashJoin(来自 SQL 的著名 INNER JOIN)。 在更多信息。
通过可靠的统计和精确的估算,我们能够在这些领域做出好的决定:选择散列连接(hash join)操作的正确构建端(build side),选择正确的连接算法(如broadcast hash join与 shuffled hash join), 调整连接的顺序...
在MySQL 8.0.18中,增加了Hash Join新功能,它适用于未创建索引的字段,...我们用explain format=tree命令可以查看到已经使用到hash join算法。 但目前8.0.18版本,仅支持join。left join和right join失效,这里请注意
第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.18 开始以下查询可以使用 hash join 进行连接查询: SELECT * FROM t1 JOIN t2 ON t1.c1=t2.c1; Hash join 不需要索引的支持。大多数情况下,hash join 比之前的 Block Nested-Loop
USE_HASH(使用HASH JOIN方式联合) 索引提示: INDEX(TABLE INDEX)(使用提示的表索引进行查询) 其它高级提示(如并行处理等等) 1.5 索引的规则: 建立索引常用的原则如下: 1. 表的主键、外键必须...
Sql中的三种物理连接操作 嵌套循环连接(Nested Loop Join) 合并连接(Merge Join) 哈希匹配(Hash Join)
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 ...
HASH JOIN会将一个表格和一个已经被执行的JOIN声明的结果连接在一起。JOIN HINT会导致数据库性能的极端低下并应留给DBA处理。 你的另一个选择是使用插入来控制JOIN的执行顺序,下面是使用实例,其中Catalog, Product...
Join,HashJoin这三种物理连接中的一种。理解这三种物理连接是理解在表连接时解决性能问题的基础,下面我来对这三种连接的原理,适用场景进行描述。循环嵌套连接是最基本的连接,正如其名所示那样,需要进行循环嵌套,...
MySQL 8.0.18 稳定版(GA)已于昨日正式发布,Hash Join 也如期而至。 快速浏览一下这个版本的亮点! 1.Hash Join Hash Join 不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。 2.EXPLAIN ...
Hash Join Hash Join 不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。 下面通过实例代码给大家介绍Mysql 8.0.18 hash join测试,具体内容如下所示: CREATE TABLE COLUMNS_hj as select *...
1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query Language)简称SQL,是一种关系数据库查询语言,用于存取数据以及查询、更新和管理关系数据库系统。 1.2 语句结构 1.2.1 数据查询语言(DQL) 对数据库进行...
具体详情请看下文代码分析。 --查询正在执行的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
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 ...
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...
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_...