暂无图片
mysql中select和group by的执行顺序问题
我来答
分享
CAI
2021-03-02
mysql中select和group by的执行顺序问题

select name,tel
from Employees
where location =‘beijing’
order by num asc

据说select 优先级高于order by ,因此select 先执行,然后对结果order by .

但是如果是这样,上面的select 语句没有查询num,后面如何进行排序呢?
而试验证明,确实是按照num顺序排列了,请问是为什么?
对select在内部的实际操作不明白。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
Cui Hulong

1.mysql执行里规定的规则 就是select 优先于order by
2.mysql索引组织表 所有数据都有主键为基础
3.order by num查不到 ,sql解析检查就会失败。sql无法执行的
4.从硬盘读数据的时候 ,就是已经是已经排序规则的。

暂无图片 评论
暂无图片 有用 0
Michael Liu

首先,我了解到的select语句的执行顺序为:
1、加载表数据到内存,没有索引时,会将表中所有的数据都加载到内存;有索引时,则根据索引和where条件有针对性的取出符合条件的数据,再加载到内存
2、无索引时,执行where条件,留下符合条件的内容,删除其它不符合条件的
3、执行group by子句,使用内存中的一块区域,专门用于分组,留下select指定的需要的列内容和新产生的聚合列的内容,其它删除
4、执行having子句,对group by的结果进行条件过滤
5、执行order by子句
6、执行limit子句

根据以上的执行顺序,个人理解为:
select语句在取数据的时候,一开始是取整行数据的,然后在group by的时候会剔除其它未被选中的列,你的语句没有用到group by,所以没有剔除,最后再用order by排序的时候,num列还是存在的,所以可以排列;只是最后显示给你看的时候才把多余列剔除掉。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏