`
jinghuainfo
  • 浏览: 1526427 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

HASH JOIN 跟NESTED LOOP 快一个列子

 
阅读更多
<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 &gt;=<br>
TO_DATE (20110501000000, 'yyyymmddhh24miss') + (9 / 24)<br>
AND inserttime &lt;<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 &gt;=<br>
TO_DATE (20110501000000, 'yyyymmddhh24miss') + (9 / 24)<br>
AND inserttime &lt;<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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics