SQL 优化tips 及误区
1. 几个表进行join,然后过滤 等价于 分别过滤为小表后,再join?
并不完全。
2)确实比1)效率高,
但要注意一些NULL值过滤。否则2)得到的结果比1)多
2. left join 的 不等值连接 等价于 left join where 不等值条件?
并不。
可以把不等值挪到case when中。where会丢失左表的数据
3. join 时 无on连接条件,表示的是笛卡儿积。
强行连接,m*n
4. 使用UDF,替代那些经常调用的语句。(提高代码的可维护和重复可用,与效率无关)
5. 对查询频繁使用,值的惟一性比较高的字段 设置索引。
6. 充分使用分区列,对数据进行裁剪。
7. 索引列
1)可以设置是 允许NULL,但在查询时会因为其允许使用NULL而放弃索引。
2)如果列本身含有NULL值,创建索引会失败;
8. Hive的map join 解决超大表与极小表的join问题
原理: MAPJION会把小表全部读入内存中
在map阶段直接拿另外一个表的数据和内存中表数据做匹配
由于在map是进行了join操作,省去了reduce运行的效率也会高很多
select /*+ mapjoin(A)*/ -- 通过hint的方式指定join
f.a,f.b
from A t join B f on ( f.a=t.a and f.ftime=20110802)
map join的另外一个很大的好处是:
能够进行不等值的join操作。
如果将不等条件写在where中,那么mapreduce过程中会进行笛卡尔积,运行效率特别低;
如果使用mapjoin操作,在map的过程中就完成了不等值的join操作,效率会高很多。
7. hive其他tips:
1)列裁剪: 少用*号全查询,只读取需要的列。
2)分区裁剪: 过滤掉不必要的分区。
3)数据量大的情况下,慎用count(distinct),容易产生倾斜问题。(是按group by分组,按distinct排序)
4)合并小文件
- 是否合并Map输出文件:hive.merge.mapfiles=true(默认值为真)
- 是否合并Reduce 端输出文件:hive.merge.mapredfiles=false(默认值为假)
- 合并文件的大小:hive.merge.size.per.task=256*1000*1000(默认值为 256000000)
5)join 时应该将条目少的表/子查询放在 Join 操作符的左边。
原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生 OOM 错误的几率。
6) hive 不能做不等值join
其他的SQL 与 hive 之间的连接方式+连接条件+过滤条件 的转化,要考虑清楚其逻辑关系。数据是否一致(注意null值,重复数据等)
7) 更多请参考
SQL 优化tips 及误区的更多相关文章
- SQL 优化tips
1. 陷阱, 1)几个表进行join,然后过滤 等价于 2)分别过滤为小表后,再join? 并不完全.2)确实比1)效率高,但要注意一些NULL值过滤.否则2)得到的结果比1)多
- SQL优化之count(*),count(列)
一.count各种用法的区别 1.count函数是日常工作中最常用的函数之一,用来统计表中数据的总数,常用的有count(*),count(1),count(列).count(*)和count(1)是 ...
- MySQL 数据库性能优化之SQL优化
前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...
- SQL优化的四个方面,缓存,表结构,索引,SQL语句
一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...
- MySQL优化五 SQL优化
1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然 ...
- mysql优化方案之sql优化
优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先 ...
- SQL优化经验总结
一. 优化SQL步骤 1. 通过 show status和应用特点了解各种 SQL的执行频率 通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extend ...
- sql优化详细介绍学习笔记
因为最近在面试,发现sql优化这个方面问的特别特别的多.之前都是零零星星,不够全面的了解一点,刚刚在网上查了一下,从 http://blog.csdn.net/zhushuai1221/article ...
- MySQL 数据库性能优化之SQL优化【转】
优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑, ...
随机推荐
- locaton.href传参数
location.href = location.href.substring(0,location.href.lastIndexOf('?'))+'?typeId=' + fid + '&p ...
- 在已有Windows系统基础上安装ubuntu后无Windows启动项
1. 原系统为windows 2. 清出一个不用的分区给linux,使用windows磁盘管理器将该分区重新划分为两个分区,分别用于root和swap 3. 安装过程中ubuntu提示原系统为非UEF ...
- 饿了么移动APP的架构演进
1MVC 我们常说,脱离业务谈架构就是纯粹的耍流氓.饿了么移动APP的发展也是其业务发展的一面镜子. 在饿了么业务发展的早期,移动APP经历了从无到有的阶段.为了快速上线抢占市场,传统移动APP开发的 ...
- 关于Eclipse无法显示package Explorer 内容的解决方法
今天电脑不知道怎么搞的抽风了, package explorer等内容完全无法显示.用window->view方法手动添加还是setpreView都没有办法解决. 网上搜了半天也没有解决办法.无 ...
- PAT 乙级 1063 计算谱半径(20) C++版
1063. 计算谱半径(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 在数学中,矩阵的“谱半径”是指其特 ...
- Sqoop-1.4.6安装部署及详细使用介绍
之所以选择Sqoop1是因为Sqoop2目前问题太多.无法正常使用,综合比较后选择Sqoop1. Sqoop1安装配置比较简单 一.安装部署 (1).下载安装包 下载地址:http://archive ...
- 无法启动程序,因为计算机中丢失mfc90ud.dll的解决方案
我的编程环境是vs2008-MFC,电脑系统是win7(64位) 解决方法:“工具”—>“选项”—>“项目和解决方案”—>“VC++目录”,在可执行文件栏中加上如下路径: $(Sys ...
- [VS2013]发布网站时修改配置文件
本文来自:https://msdn.microsoft.com/en-us/library/ee942158.aspx#encrypt_webconfig Web Deployment FAQ for ...
- 自定义 MultiColumnComboBox[转]
// taken from a control written by Nishant Sivakumar. // http://www.codeproject.com/cs/combobox/DotN ...
- window的三大功能,行内样式获取的讲解 getcomputerStyle
window的三大功能: js引擎 dom渲染 获取行内中css的属性: chrome和Firefox加上 ie9+(所谓的高级浏览器)用的方法: window.getComeputerStyle(d ...