记一次工作中SQL 的FULL JOIN 优化过程

在完成同事交接的一个项目需求迭代的时候,发现了有一段Full Join的代码执行比较慢。

其代码大概如下:

SELECT nvl(a.user_id,b.user_id) AS user_id,nvl(a.visit_num,0) AS visit_num,nvl(b.comment_num,0) AS comment_num
FORM
(SELECT user_id,visit_numFROM user_visits
) AS a
FULL JOIN
(SELECTuser_id,comment_numFROM user_comment
) AS b ON a.user_id=b.user_id;

我现在要迭代一次需求,新增一张user_like表,如果照之前同事的思路,我直接在他原来的SQL代码中再加一段FULL JOIN就可以解决需求问题了,但是这样解决不了性能问题,随着我这次需求的迭代,执行时间只会更慢。

经过思考之后我采用了另一种方式重构了同事原来的代码,重构后的代码如下:

SELECT user_id,MAX(visit_num) AS visit_num,MAX(comment_num) AS comment_num
FORM
(SELECT user_id,visit_num,0 AS comment_numFROM user_visitsUNION ALLSELECTuser_id,0 AS visit_num,comment_numFROM user_comment
)
GROUP BY user_id;

分别观察这个两个SQL对应的执行JOB,如下图所示:

优化前

优化后

分别对优化前的SQL和优化后的SQL分别进行10次查询操作,取执行时长平均值。

发现优化前SQL执行平均时长是100s左右,优化后SQL执行平均时长是35秒左右,明显提升了查询的性能。

Hive SQL之FULL JOIN优化相关推荐

  1. sql server left join 优化_网站优化推广

    网站优化推广,力果科技,杭州力果科技有限公司成立于2012年1月,业务专注于为中小企业提供网站seo优化.商城app开发.营销型网站建设以及网络营销推广定制化服务商. , 平台下载快捷.方便,广告做好 ...

  2. 如何优化Hive SQL ??

    Hive作为大数据平台举足轻重的框架,以其稳定性和简单易用性也成为当前构建企业级数据仓库时使用最多的框架之一. 但是如果我们只局限于会使用Hive,而不考虑性能问题,就难搭建出一个完美的数仓,所以Hi ...

  3. hive分桶表join_Hive:JOIN及JOIN优化 2015.10.25

    1. Join的基本原理 大家都知道,Hive会将所有的SQL查询转化为Map/Reduce作业运行于Hadoop集群之上.在这里简要介绍Hive将Join转化为Map/Reduce的基本原理(其它查 ...

  4. [一起学Hive]之十二-Hive SQL的优化

    十一.Hive SQL的优化 本章只是从HQL层面介绍一下,日常开发HQL中需要注意的一些优化点,不涉及Hadoop层面的参数.配置等优化. 其中大部分是我之前发过的博客文章,这里整理了下. 11.1 ...

  5. 【hive】数据倾斜-大表小表join优化mapjoin

    真正让你明白Hive调优系列3:笛卡尔乘积,小表join大表,Mapjoin等问题 0.Hive中的优化分类    真正想要掌握Hive的优化,要熟悉相关的MapReduce,Yarn,hdfs底层源 ...

  6. Hive SQL 小表与大表Join 原理与实操

    一.案例演示 1)没有使用map join -- a 表是大表,数据量是百万级别 -- b 表是小表,数据量在百级别 select a.field1 as field1,b.field2 as fie ...

  7. Hive join 优化实战

    由于 hive 与传统关系型数据库面对的业务场景及底层技术架构都有着很大差异,因此,传统数据库领域的一些技能放到 Hive 中可能已不再适用.关于 hive 的优化与原理.应用的文章,前面也陆陆续续的 ...

  8. 浅谈Hive SQL的优化

    目前团队的数据处理都在Hadoop集群上, 一是因为需要处理的数据量都是亿级的,这种规模的数据适合用Hadoop集群并行处理: 二是免除了分库分表给查询处理上带来的麻烦.Hive是基于Hadoop的一 ...

  9. hive sql优化和shuffle过程优化

    hive sql优化 sort by代替order by HiveSQL中的order by与其他SQL方言中的功能一样,就是将结果按某字段全局排序,这会导致所有map端数据都进入一个reducer中 ...

最新文章

  1. 条件随机场(CRF) - 2 - 定义和形式
  2. 中原大学 php,台湾中原大学php教程孙仲岳主讲
  3. 在mysql-workbench中运行function
  4. hdu 1754/zstu 3121 I Hate It(线段树)
  5. MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
  6. 孙悟空!登上 Nature !
  7. UI设计实用素材|订阅按钮(CTA按钮 )
  8. miniblink载入html,(转)miniblink跨线程异步JS回调,及miniblink提升首屏加载速度的代码...
  9. MT4指标安装方法,以MACD红绿柱黄白线双线macd为例
  10. jQuery 样式操作
  11. 偶像生于1964:马云、张朝阳、求伯君的激荡人生
  12. Ultra Compare 8 文本比较乱码问题 解决
  13. SEDA: An Architecture for Well-Conditioned, Scalable Internet Services
  14. OpenLayers 3 坐标、坐标系、投影
  15. 小程序功能(七)电子签名
  16. [转载]洛谷日报索引
  17. 七牛:测试域名过期?自己域名又没备案?这里有一招完美解决你烦恼
  18. Asp.Net Web Api 部署------在云服务器IIS上部署Web Api程序
  19. ENVI:如何进行遥感图像的分类?(决策树模型)
  20. 分析Perm()函数功能、代码、时间复杂度

热门文章

  1. 台式电脑安装两个系统的步骤和方法
  2. Linux vi编辑器中出现很多^M的解决办法
  3. pcb入门之PCB封装自制
  4. 汽车销售行业行为识别
  5. 区块链协议新方向-图灵奖得主Macali开发Algorand
  6. 搞定mysql的 行转列(7种方法) 和 列转行
  7. 【python入门篇——12】三级菜单详解
  8. 极速搭建周立功IMX283A ARM Linux开发环境(1)
  9. opencv图像融合(给人脸添加一个眼镜)
  10. 【OpenCV】用OpenCV进行大恒CG400CG410视频采集卡的视频读取