mysq和hive的sql执行顺序对比
msyql语句执行顺序
代码写的顺序:
select ... from... where.... group by... having... order by..
或者
from ... select ...
代码的执行顺序:
from... where...group by... having.... select ... order by...
hive 语句执行顺序
from … where … group by … having … select … order by …
from … on … join … where … group by … having …
select … distinct … order by … limit
查看执行计划
explain+sql
查看详细执行计划
explain extended + sql
实例
结论:
left join关联先执行where条件在执行on后面的关联
hql:
select * from jsqdw.402_play_count_length_info a
left join jsqdw.402_buffer_count_length_info b
on a.device_id=b.device_id and a.terminal_type='soft'
and b.terminal_type='soft';
select * from jsqdw.402_play_count_length_info a
left join jsqdw.402_buffer_count_length_info b
on a.device_id=b.device_id
and b.terminal_type=a.terminal_type where a.terminal_type='soft';
a表硬终端18条数据,b表硬终端4条数据
- 第一个hql用left join on 加所有条件出来29条数据,软终端的11条数据影响到了硬终端数据,第一个sql有问题
- 用left join on where 加等于值条件出来的左表18条数据才对
两个表字段的值相等要在on前面写成关联字段相等where后面写值