<p>在报表库的每个小时数据量23113条时候</p>
<p>NESTED LOOP 要跑3分钟 而 HASH JOIN 才7秒钟</p>
<p>NESTED LOOP:</p>
<p>SELECT *<br>
FROM ( SELECT ACTIONID,<br>
OPCONTENTID,<br>
MOUDULEID,<br>
PORTALID,<br>
'lars01.OP_MAIL_VISIT_04_1105' AS table_name,<br>
TO_DATE (20110501000000, 'yyyymmddhh24miss') + (9 / 24)<br>
AS INSERTTIME_START,<br>
TRUNC (TO_DATE (20110501000000, 'yyyymmddhh24miss'))<br>
+ ( (9 + 1) / 24)<br>
AS INSERTTIME_END,<br>
MIN (RECORDID) AS RECORDID,<br>
COUNT (1) AS row_num<br>
FROM lars01.OP_MAIL_VISIT_03_1104<br>
WHERE inserttime >=<br>
TO_DATE (20110501000000, 'yyyymmddhh24miss') + (9 / 24)<br>
AND inserttime <<br>
TRUNC (TO_DATE (20110501000000, 'yyyymmddhh24miss'))<br>
+ ( (9 + 1) / 24)<br>
GROUP BY ACTIONID,<br>
OPCONTENTID,<br>
MOUDULEID,<br>
PORTALID) t<br>
LEFT JOIN<br>
(SELECT DISTINCT action_id,<br>
module_iD,<br>
portal_id,<br>
opcontent_id<br>
FROM etl_rule s<br>
WHERE rule_valid = 1<br>
AND rule_type = '点击 '<br><strong> AND TO_CHAR (action_id) IN (SELECT *</strong>
<br>
FROM TABLE (<br>
SELECT f_etl_proc (<br>
check_value01<br>
|| ','<br>
|| check_value02)<br>
FROM etl_condition<br>
WHERE condition_id =<br>
3))) s<br>
ON ( t.actionid = s.action_id<br>
AND t.opcontentid = s.opcontent_id<br>
AND t.MOUDULEID = s.module_iD<br>
AND t.PORTALID = s.portal_id)<br>
WHERE action_id IS NULL</p>
<p><span style="color: #0000ff;">DBA 说 etl_rule每条记录都要全表扫描 TABLE() 在开发库单独拿出该语句执行要122秒</span>
</p>
<p><span style="color: #0000ff;">而HASH JOIN 只要2.04秒<br></span>
</p>
<p>HASH JOIN:</p>
<p>SELECT *<br>
FROM ( SELECT ACTIONID,<br>
OPCONTENTID,<br>
MOUDULEID,<br>
PORTALID,<br>
'lars01.OP_MAIL_VISIT_04_1105' AS table_name,<br>
TO_DATE (20110501000000, 'yyyymmddhh24miss') + (9 / 24)<br>
AS INSERTTIME_START,<br>
TRUNC (TO_DATE (20110501000000, 'yyyymmddhh24miss'))<br>
+ ( (9 + 1) / 24)<br>
AS INSERTTIME_END,<br>
MIN (RECORDID) AS RECORDID,<br>
COUNT (1) AS row_num<br>
FROM lars01.OP_MAIL_VISIT_03_1104<br>
WHERE inserttime >=<br>
TO_DATE (20110501000000, 'yyyymmddhh24miss') + (9 / 24)<br>
AND inserttime <<br>
TRUNC (TO_DATE (20110501000000, 'yyyymmddhh24miss'))<br>
+ ( (9 + 1) / 24)<br>
GROUP BY ACTIONID,<br>
OPCONTENTID,<br>
MOUDULEID,<br>
PORTALID) t<br>
LEFT JOIN<br>
(SELECT DISTINCT action_id,<br>
module_iD,<br>
portal_id,<br>
opcontent_id<br>
FROM etl_rule s,(SELECT *<br>
FROM TABLE (<br>
SELECT f_etl_proc (<br>
check_value01<br>
|| ','<br>
|| check_value02)<br>
FROM etl_condition<br>
WHERE condition_id =<br>
3)) b<br>
WHERE rule_valid = 1<br>
AND rule_type = '点击 '<br><strong> AND TO_CHAR (action_id) = b.column_value</strong>
<br>
) s<br>
ON ( t.actionid = s.action_id<br>
AND t.opcontentid = s.opcontent_id<br>
AND t.MOUDULEID = s.module_iD<br>
AND t.PORTALID = s.portal_id)<br>
WHERE action_id IS NULL</p>
分享到:
相关推荐
数据库中JOIN操作的实现主要有三种:嵌套循环连接(Nested Loop Join),归并连接(Merge Join)和散列连接或者哈稀连接(Hash Join)。其中嵌套循环连接又视情况又有两种变形:块嵌套循环连接和索引嵌套循环连接。
Hash join算法的一个基本思想就是根据小的row sources(称作build input,我们记较小的表为S,较大的表为B) 建立一个可以存在于hash area内存中的hash table,然后用大的row sources(称作probe input) 来探测前面所建...
hash join 原理和算法 1.Hash Join概述 2.Hash Join原理 3.Hash Join算法 4.Hash Join的成本
Sql中的三种物理连接操作 嵌套循环连接(Nested Loop Join) 合并连接(Merge Join) 哈希匹配(Hash Join)
oracle hash join算法原理
Hash join算法原理 详细讲述了oracle sql语句的连接方式 对于sql调优提高有很大帮助
NULL 博文链接:https://juji1010.iteye.com/blog/1535638
MySQL 开发组于 2019 年 10 月 14 日 正式发布了 MySQL 8.0.18 GA 版本,带来了一些新特性和增强功能。其中最引人注目的莫过于多表连接查询支持 hash join 方式...大多数情况下,hash join 比之前的 Block Nested-Loop
数据库 我自己在 Java 中实现了 SortMergeJoin 和 HashJoin(来自 SQL 的著名 INNER JOIN)。 在更多信息。
在MySQL 8.0.18中,增加了Hash Join新功能,它适用于未创建索引的字段,做等值关联查询。在之前的版本里,如果连接的字段没有创建索引,查询速度会是非常慢的,优化器会采用BNL(块嵌套)算法。 Hash Join算法是把...
fasthash,go写的一个hash算法,比标准hash算法的速度更快,占用内存更低
Oracle中hash join研究.pdf
给大家介绍Mysql 8.0.18 hash join测试的相关知识,本文通过实例代码讲解,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
1. 生成Hash Table:将参与join的左表生成Hash Table 3. FILTER处理:按照不等值条件进行过滤,进而输出最终结果 1. 对语法树生
Oracle CBO 学习笔记之(1) : 深入理解Oracle Hash Join的代价模型及其执行流程:word,pdf,图例
MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的...
第一次作业