1. 如果没有优化过几千几万个SQL,哪里能练出火眼金睛,注意看跑得慢的SQL是HASH JOIN,跑得快的SQL是 HASH JOIN RIGHT SEMI
  2. 也就是说跑得慢的SQL是 HASH JOIN(inner join),跑得快的 SQL 是 HASH SEMI JOIN (semi join)
  3. 说人话就是跑得慢的SQL变成内连接了,跑得快的SQL是半连接(in/exists)。
  4. 明明SQL是半连接啊,咋变成内连接了呢,这涉及到优化器内部原理和大学课程里面的关系代数了这里就不装逼了,免得到时候一个个看不懂来问我烦死了。
  5. 问题又来了,就几万跟十几万的进行HASH JOIN 应该很快啊,如果跑的慢那只有一个解释,2个表的关联列数据分布都非常不均衡
  6. with t1 as
  7. (select /*+ materialize */
  8. a.user_name, a.invest_id
  9. from base_data_login_info@agent a
  10. where a.str_day <= '20160304' and a.str_day >= '20160301'
  11. and a.channel_id in (select channel_rlat from tb_user_channel a, tb_channel_info b where a.channel_id = b.channel_id and a.user_id = 5002)
  12. and a.platform = a.platform)
  13. select count(distinct user_name) ,count(distinct invest_id) from t1;
  14. Plan hash value: 901326807

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8568259/viewspace-2102448/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8568259/viewspace-2102448/

HASH SEMI JOIN (semi join) 比 hash join 快!相关推荐

  1. Mysql 优化器内部JOIN算法hash join Nestloopjoin及classic hash join CHJ过程详解

    Mysql hash join之classic hash join CHJ过程详解 hash join的历史 优化器里的hash join算法在SQL Server.Oracle.postgress等 ...

  2. Hive中的map join、left semi join和sort merge bucket join

    map join map join是将join双方比较小的表直接分发到各个 map进程的内存中,在map进程中进行join操作,这样就不用进行reduce步骤,从而提高了速度. 如果不指定mapjoi ...

  3. mysql inner join 索引_MySQL 在 INNER JOIN 场景的使用-爱可生

    原标题:MySQL 在 INNER JOIN 场景的使用-爱可生 本文详细介绍了 MySQL 参数 join_buffer_size 在 INNER JOIN 场景的使用,OUTER JOIN 不包含 ...

  4. java fork join原理_细说Fork/Join框架

    什么是Fork/Join框架? Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果后得到大任务结果的框架.Fork就是把一个大 ...

  5. mysql right join实例_MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    LEFT JOIN 语法用法与实例MySQL LEFT JOIN 语法 SQL(MySQL) LEFT JOIN 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录.LEFT ...

  6. 【Transact-SQL】SQL Server自动把left join自动转化为inner join、以及关联时的数据重复问题...

    1.SQL Server自动把left join自动转化为inner join的问题: 下面的两个语句都是left join的,但是一个却转化成了 inner join drop table a,B ...

  7. Python中join()方法和os.path.join()方法

    join() 方法: 描述:join()方法用于将序列中的元素以指定的字符连接成一个新的字符串 语法:x.join(y) y: 可迭代对象,对象内的元素必须是字符串类型.对象可以是字符串.元组.列表和 ...

  8. mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...

    Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...

  9. mysql join 与 cross join 效率_浅析Mysql Join语法以及性能优化

    在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧,这里我有个比较简便的记忆方法,内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则 ...

最新文章

  1. 需求简报_代码简报:有史以来最怪诞的丑毛衣
  2. 终极版Python学习教程:一篇文章讲清楚Python虚拟环境
  3. 我的程序员之路:上帝的苹果
  4. 每天一道LeetCode-----摩尔投票法寻找给定数组中出现个数大于n/2或n/3的元素
  5. filepath直接指定到文件名吗_PyTest运行指定的测试集
  6. 福利好礼现金大奖等你来→首届 .NET Conf China Hackathon 火热报名中!
  7. Raspbian 2019-06-20 发布
  8. 送给创业的朋友:落入坑洞的猎人
  9. ASP.NET(C#版) FileUpload控件
  10. 华创e路航固件_华创e路航地图
  11. 走遍美国之大雾山国家公园
  12. 2021深圳观澜中学高考成绩查询入口,2019深圳龙华中学、观澜中学、龙华高级中学录取分数线及高考成绩喜报...
  13. 注塑机服务器显示e011,深圳市产业导向目录(2005-2006年)
  14. python位置参数ppt_argparse模块的位置参数和可选(必选)参数
  15. UIPATH Outlook邮件筛选
  16. 发动机压缩比怎么计算公式_怎么知道汽车压缩比
  17. 用安卓手机看txt小说,阅读器APP怎么选
  18. 从书法中窥测字体的演变
  19. 2ASK和2FSK调制解调仿真
  20. 有人做TikTok跨境电商财务自由了,他们是怎么做的?

热门文章

  1. 【UE】Slate编辑器动态添加Button
  2. linux运维每天都要做什么,Linux运维工作清闲吗?每天需要干什么?
  3. K-means方法总结(附代码)
  4. wos 文献被引_WoS和ESI数据库高被引论文的界定.pdf
  5. vant 表单按钮置灰_Vant Button 按钮
  6. windows7隐藏桌面计算机,教你win7小技巧之隐藏桌面图标
  7. HTTP协议的理解和使用
  8. 路径规划学习之地图生成(二)
  9. 【QA】集成高德地图SDK闪退问题
  10. 数组图像处理:直方图均衡化