博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hive优化实战
阅读量:5159 次
发布时间:2019-06-13

本文共 962 字,大约阅读时间需要 3 分钟。

2019年1月8日,付哥给了我一份公司以前的一份SQL优化方案文档。十分感谢。记录了许多在公司以前优化的案例。

--------------------------------------------------------------------------------------------------------------------------------------------------------

一、表TMP_c(58分钟)

表来源:

1.IML_a 这张表在2018年11月某一天的数据量是22025054

2.TMP_b 这表数据量是12条

优化点:

1.两张表关联的时候把BATCH_DATE的字段放在on后面,不要放在where后面。

2.大表关联小表可以使用MAPJOIN,指定MAPJOIN使用/*+mapjoin(b)+/

3.代码使用了三层嵌套查询,还可以把每一层提出放到临时表并行运行

 

第一点以前也用过但是具体为什么一直也没注意。今天要总结一下:

通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

 在使用left jion时,on和where条件的区别如下:

我们假设有如下两张表

两条SQL:

1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)

 其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。

而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

使用第二种中间表确实小了很多。减少了内存使用。======》》》可能是这样吧。

 

 

二、表TMP_c(58分钟)

转载于:https://www.cnblogs.com/wqbin/p/10238346.html

你可能感兴趣的文章
javascript
查看>>
python3 aes加解密
查看>>
JSON
查看>>
【LOJ】#2173. 「FJOI2016」建筑师
查看>>
【LOJ】#2549. 「JSOI2018」战争
查看>>
MYSQL逆向工程generatorConfig
查看>>
Microsoft Visual Studio 2010(vs10)安装与使用
查看>>
sitecore系列教程之Sitecore个性化-体验概况概述
查看>>
【洛谷】P1876 开灯
查看>>
本周总结
查看>>
关于“/”应用程序中的服务器错误 之解决方案
查看>>
php编译安装参数说明
查看>>
wcf系列5天速成——第二天 binding的使用(2)
查看>>
Windows推包脚本
查看>>
CSS盒子模型
查看>>
PYthon帮助
查看>>
学习Javascript闭包(Closure)
查看>>
神经网络加速器应用实例:图像分类
查看>>
AtCoder Regular Contest 081
查看>>
Ant+Subversion总结
查看>>