sql优化之sql七个查询命令的特征---来自程序lee的自我概述

sql查询命令的特征

1.查询命令

1.1 FROM

作用:

​ 1.将硬盘上的表文件加载到内存中,生成一个全新的临时表

​ 2.定位内存中已经存在的临时表

注意点:

​ 1.FROM的优先级是最高的,永远是第一个执行

​ 2.FROM定位的是内存中的临时表,所以必须手动给临时表指定表名

1.2 WHERE

作用:

​ 1.操作的表是from生成的临时表

​ 2.会循环遍历当前临时表中的每一个数据行,将满足条件的数据行保存到一个全新的临时表

注意点:

​ 1.由于WHERE命令每次操作一个数据行,因此在WHERE执行时,无法使用聚合函数作为判断条件

1.3 GROUP BY

作用:

​ 1.首先对临时表中的数据进行一次排序处理

​ 2.然后将具有相同特征的数据行保存到同一个临时表中

注意点:

​ 1.多字段分组时查询,分组字段执行的顺序对于查询结果来说时没有任何影响的,所以从第二个分组字段开始,操作的临时表是上一个分组字段生成的临时表

​ 2.如果select操作的临时表是由当前的group by 提供,那么此时select将遍历group by生成的每一个临时表,在操作具体的临时表时,select只会读取指定字段中第一个数据行的内容**[这不就去重了嘛?]**

1.4 HAVING

作用:

​ 将GROUP BY生成的零食表中不满足条件的临时表进行删除

注意点:

​ 1.having命令不能独立出现,只能出现在group by 后面

​ 2.having命令每次操作的是临时表,所以它所选择的判断条件,应该来自于聚合函数

1.5 SELECT

作用:

​ 1.select操作的临时表是由from或where命令提供的,那么select会将指定字段中的所有内容读取出来,并将读取出的内容组成一个全新的临时表

​ 2.select操作的临时表是由group by或having提供的,那么select将遍历group by或having生成的每一个临时表,在操作具体的临时表时,select只会读取指定字段中第一个数据行的内容

1.6 ORDER BY

作用:

​ 1.专门针对select生成的临时表中的数据行进行排序,并将排序后的内容组成一个全新的临时表

注意点:

​ 1.如果order by 使用字段的名称进行排序时,这个字段名可以不出现在select生成的临时表中,但是如果order by使用字段顺序进行排序时,索引的位置必须在select查询语句中出现

1.7 LIMIT

作用:

​ 对当前临时表中的数据行进行截取

2.查询语句执行特征

1.上述查询命令中,除却having命令,其他的查询命令执行完毕后都会生成全新的临时表

2.查询命令中,除却from,其他的查询命令操作的临时表都是上一个查询命令生成的临时表

3.当前查询命令执行完毕后,会自动将上一个茶挨训命令生成的临时表进行销毁处理,所以,在一个查询语句执行完毕后,用户只能看到最后一个查询命令生成的临时表

4.多字段分组时查询,从第二个分组字段开始,操作的临时表是上一个分组字段生成的临时表

3.执行效率过慢的查询命令(倒序)

1.执行速度最慢的: GROUP BY

原因:

​ 在执行时,首先将临时表中的数据进行排序,然后在进行分组

2.ORDER BY

原因:

​ 需要对select生成的临时表中的数据行进行一次排序,然后将排好顺序的数据行组成一个全新的临时表

3.where

原因:

​ 需要对表中的所有数据行进行遍历,如果当前临时表中的数据行过多,就会导致where执行效率非常慢

4.limit

原因:

​ 如果指定起始的行数过大,比如3W行,那么limit会一行一行的取找到这一行

5.对于多表查询来说,如果没有指定表文件的加载顺序,也会导致查询速度过慢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值