首页
学习
活动
专区
圈层
工具
发布

mysql 如何优化left join

今天遇到一个left join优化的问题,搞了一下午,中间查了不少资料,对MySQL的查询计划还有查询优化有了更进一步的了解,做一个简单的记录:  select c.* from hotel_info_original...一般情况下参与联合查询的两张表都会一大一小,如果是join,在没有其他过滤条件的情况下MySQL会选择小表作为驱动表,但是left join一般用作大表去join小表,而left join本身的特性决定了...抱着解决这个问题的决心今天又翻看了一遍MySQL官方文档  关于优化查询的部分,看到了这样一句:这里的一个问题是MySQL能更高效地在声明具有相同类型和尺寸的列上使用索引。...那么如何优化left join:  1、条件中尽量能够过滤一些行将驱动表变得小一点,用小表去驱动大表  2、右表的条件列一定要加上索引(主键、唯一索引、前缀索引等),最好能够使type达到range及以上...拓展知识: 怎么查看mysql执行计划? 使用explain 关键字+需要执行的sql语句。

12.1K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Hive的left join、left outer join和left semi join三者的区别

    : MySQL use test; DROP TABLE IF EXISTS table1; create table table1( student_no bigint comment '学号', student_name...join测试数据 hive left join测试数据 测试1:left join 语句: select * from table1 left outer join table2 on(table1....‘join’ ‘table2’ in join type specifie 我用的HIVE版本是0.8,不支持直接的left join写法; 测试2:left outer join 语句: select...测试3:left semi join 语句: select * from table1 left semi join table2 on(table1.student_no=table2.student_no...结论: hive不支持’left join’的写法; hive的left outer join:如果右边有多行和左边表对应,就每一行都映射输出;如果右边没有行与左边行对应,就输出左边行,右边表字段为NULL

    3.6K70

    MySQL之LEFT JOIN中使用ON和WHRERE对表数据

    原文链接:https://segmentfault.com/a/1190000020458807 背景 left join在我们使用mysql查询的过程中可谓非常常见...SELECT c.name, count(s.name) as numFROM classes c left join students son s.class_id = c.idand s.gender...答案是两个需求都是第一条语句是正确的,要搞清楚这个问题,就得明白mysql对于left join的执行原理,下节进行展开。...原理 mysql 对于left join的采用类似嵌套循环的方式来进行从处理,以下面的语句为例: SELECT * FROM LT LEFT JOIN RT ON P1(LT,RT)) WHERE P2...补上的行} }}当然,实际情况中MySQL会使用buffer的方式进行优化,减少行比较次数,不过这不影响关键的执行流程,不在本文讨论范围之内。

    1.2K30

    left join 、right join 、inner join之间的区别

    left join(左联接) 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。...bID     bName 1     2006032401 2     2006032402 3     2006032403 4     2006032404 8     2006032408 left...join sql语句如下: select * from A left join B on A.aID = B.bID 结果如下: aID     aNum     bID     bName 1...join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的....2006032403 4     a20050114    4     2006032404 NULL     NULL     8     2006032408 结果说明: 仔细观察一下,就会发现,和left

    2.6K30

    sql中left join、right join、inner join区别

    sql中left join、right join、inner join区别 【1....总述】 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(...结果刚好和left join相反,right join以右表(B)为基础的,A表不足的地方用NULL填充 ★case3: inner join sql语句: select * from A inner...总结】 LEFT JOIN 操作用于在任何的 FROM 子句中,组合来源表的记录。...使用 LEFT JOIN 运算来创建一个左边外部联接,左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。 RIGHT JOIN同理。

    81410

    MySQL 案例:left join 与 BUG

    问题描述 最近遇到用户反馈同样的 SQL 在自建的 MySQL 测试实例和腾讯云的 CDB 实例上查询结果不一致的现象。...; 在腾讯云 CDB 上的执行结果: mysql> select * from stu t1 left join(select id,sname as sname_t1,1 as cname from...明确这个 bug 的情况之后,解决问题的方法自然也明确了:where 条件中不要使用这个被定义为常量的 cname 就行,比如: select * from stu t1 left join(select...执行优化器把这个 left join 改写成了 join: mysql> explain select * from stu t1 left join(select id,sname as sname_t1,1...后续有机会在详细解析这个优化策略,从结果上来看,替换掉 where 条件的内容之后,查询结果就恢复正常了: mysql> select * from stu t1 left join(select id

    2.6K176

    MySQL:Left Join 避坑指南

    链接 | segmentfault.com/a/1190000020458807 现象 left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论、商城里一个货物有多少评论...答案是两个需求都是第一条语句是正确的,要搞清楚这个问题,就得明白mysql对于left join的执行原理,下节进行展开。...根源 mysql 对于left join的采用类似嵌套循环的方式来进行从处理,以下面的语句为例: SELECT * FROM LT LEFT JOIN RT ON P1(LT,RT)) WHERE P2...补上的行 } } } 当然,实际情况中MySQL会使用buffer的方式进行优化,减少行比较次数,不过这不影响关键的执行流程,不在本文讨论范围之内。...Redis是如何实现点赞、取消点赞的? 阿里巴巴为什么能抗住90秒100亿?看完这篇你就明白了! 超详细:如何设计出健壮的秒杀系统? 我是如何用 Redis 做实时订阅推送的?

    1.6K20

    MySQL之LEFT JOIN问题汇总

    使用ON和WHRERE对表数据过滤 背景 left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论、商城里一个货物有多少评论、一条评论有多少个赞等等。...答案是两个需求都是第一条语句是正确的,要搞清楚这个问题,就得明白mysql对于left join的执行原理,下节进行展开。...原理 mysql 对于left join的采用类似嵌套循环的方式来进行从处理,以下面的语句为例: SELECT * FROM LT LEFT JOIN RT ON P1(LT,RT)) WHERE P2...补上的行} }}当然,实际情况中MySQL会使用buffer的方式进行优化,减少行比较次数,不过这不影响关键的执行流程,不在本文讨论范围之内。...正确的说法应该是“把重复关联键少的表放在join前面做关联可以提高join的效率。” 分析一下Hive对于两表关联在底层是如何实现的。

    1.5K20

    inner join、outer join、right join、left join 之间的区别

    一、sql的left join 、right join 、inner join之间的区别   left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录    right join...(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录   inner join(等值连接) 只返回两个表中联结字段相等的行        outer join(外连接) 可分为左外连接left...join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的....并不以谁为基础,它只显示符合条件的记录. -------------------------------------------- 4.outer join left join 是 left outer...1.要进行部门表和职工表的关联查询,并要查询出所有的部门信息,这时候,下面的左连接查询就能够查询出想要的结果,左连接就是以left join前面的表为主表,即使有些记录关联不上,主表的信息能够查询出来的

    6.4K30

    sql中left join、right join、inner join区别

    sql中left join、right join、inner join区别 【1....总述】 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner...结果刚好和left join相反,right join以右表(B)为基础的,A表不足的地方用NULL填充 ★case3: inner join sql语句: select * from A inner...总结】 LEFT JOIN 操作用于在任何的 FROM 子句中,组合来源表的记录。...使用 LEFT JOIN 运算来创建一个左边外部联接,左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。 RIGHT JOIN同理。

    2.7K30
    领券