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 及误区的更多相关文章

  1. SQL 优化tips

    1. 陷阱, 1)几个表进行join,然后过滤 等价于 2)分别过滤为小表后,再join? 并不完全.2)确实比1)效率高,但要注意一些NULL值过滤.否则2)得到的结果比1)多

  2. SQL优化之count(*),count(列)

    一.count各种用法的区别 1.count函数是日常工作中最常用的函数之一,用来统计表中数据的总数,常用的有count(*),count(1),count(列).count(*)和count(1)是 ...

  3. MySQL 数据库性能优化之SQL优化

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  4. SQL优化的四个方面,缓存,表结构,索引,SQL语句

    一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...

  5. MySQL优化五 SQL优化

    1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然 ...

  6. mysql优化方案之sql优化

    优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先 ...

  7. SQL优化经验总结

    一. 优化SQL步骤 1. 通过 show status和应用特点了解各种 SQL的执行频率    通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extend ...

  8. sql优化详细介绍学习笔记

    因为最近在面试,发现sql优化这个方面问的特别特别的多.之前都是零零星星,不够全面的了解一点,刚刚在网上查了一下,从 http://blog.csdn.net/zhushuai1221/article ...

  9. MySQL 数据库性能优化之SQL优化【转】

    优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑, ...

随机推荐

  1. 一个OpenGL小程序

    发个没什么技术含量的文,最近准备通过opengl的学习来好好c++,于是找了网上的教程来搭建opengl的编写环境,建了个空项目,又找了个案例稍微改了改运行了下,还成,ok了~喜不自禁~ 贴个图: 代 ...

  2. 编译安装mysql5.7

    ### 注意版本和此次更新时间 2018-3-11 版本:mysql-5.7.x 环境:linux7.x C/C++编译器安装 yum install gcc g++ -y CMake 是一个跨平台的 ...

  3. [VC6,VC9] [ts,nts,deb] [rpm,msi] 你需要下载什么格式的文件

    1.VC6与VC9的区别 VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本. VC9版本是使用Visual Studio 200 ...

  4. Ubuntu 14.10 下安装伪分布式hdoop 2.5.0

    折腾了一天,其间配置SSH时候出现了问题,误删了ssh-keygen相关文件,导致配置SSH彻底萎了,又重装了系统.... 采用伪分布式模式,即hadoop将所有进程运行于同一台主机上,但此时Hado ...

  5. MyBatis的入门案例

    1.MyBatis的结构 2.MyBatis入门案例 a.创建java项目,并在其中导入相关开发包 b.导入约束文件 http://mybatis.org/dtd/mybatis-3-config.d ...

  6. Java学习——Applet写字符串(调字体)

    import java.awt.*; import java.applet.Applet; public class GUI2 extends Applet{ public void paint(Gr ...

  7. js中事件三阶段

    js中事件三阶段 先贴代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  8. [UE4]保存玩家列表

    “Cast to”可以转换为“纯函数”

  9. sqlserver 模糊查询,连表,聚合函数,分组

    use StudentManageDB go select StudentName,StudentAddress from Students where StudentAddress like '天津 ...

  10. 常见的web安全及防护原理

    1.0 sql注入 sql注入原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. sql注入防护: 1.永远不要信任用户的输入,要 ...