mysql的七个查询命令特征

  • 一、mysql的七个查询命令特征
  • 1、from
  • 2、where
  • 3、group by
  • 4、having
  • 5、select
  • 6、order by
  • 7、limit
  • 二、查询语句特征
  • 三、七个查询命令中,哪些命令会导致执行效率过慢:
  • 四、查询命令执行过慢的原因:



这里是根据七个查询执行的优先级来介绍的

一、mysql的七个查询命令特征

1、from

【作用】:
1)、将硬盘上的表文件加载到内存中,生成一个全新的临时表
2)、定位内存中已经存在的临时表
【注意】:
1)、在一个查询语句中,第一个执行命令永远都是from
2)、from定位的是内存中的一个临时表,这个临时表必须手动指定临时表

2、where

【作用】:
1)、where 命令操作的是由from产生的临时表
2)、where命令循环遍历当前临时表中每一个数据行,将满足条件的数据行保存到一个全新的临时表中
【注意】:
由于where命令每次操作只是一个数据行,因此在where使用过程中,是无法试验聚合函数来作为判断条件

3、group by

【作用】:
1)、首先对临时表中的数据进行一次排序的处理
2)、然后将其具有相同特征的数据行保存到同一个临时表中
【注意】:
1)、多字段分组
首先,分组字段执行顺序对于查询结果来说没有任何的影响,然后,从第二个分组字段开始,操作临时表 是上一个分组字段生成的临时表
2)、如果select操作临时表是由group by提供,此时select 将遍历group by 生成的每一个临时表,在操作具体临时表时,select只会读取指定字段中第一个数据行内容

4、having

【作用】:
负责将group by生成的临时表不满足条件 的临时表进行删除
【注意】:
1)、having命令不能独自出现的,只能出现在group by 命令后面
2)、having命令每次操作的是一个临时表,因此选则判断条件应该是来自于聚合函数

5、select

【作用】:
1)、select操作的是临时表,有from或where命令来提供的,select将指定的字段中所有的内容读取出来,将读取出来的内容组成一个全新的临时表
2)、select操作的临时表,由group. by或则 having命令提供的此时select将遍历生成的每一个临时表在操作具体临时表时,select只会读取指定字段中第一个数据行内容

6、order by

【作用】:
专门针对select生成的临时表中数据行进行排序
将排序后内容组成一个全新的临时表.
【注意】:
如果order_by 使用字段名进行排序时,字段名可以不出现在
select生成的临时表
如果order by使用字段顺序进行排序时,索引位置必须在select
查询语句中出现

7、limit

【作用】:
对表中的数据进行截取

二、查询语句特征

1.七个查询命令中,除了having命令之外。剩下的六个查询命令执行完毕后
都会生成全新的临时表
2.七个查询命令中,除了from命令之外,剩下的六个查询命令操作的临时表
都是上一个查询命令生成临时表
3.在当前查询命令执行完毕后,mysql自动的将上一个查询命令生成的临时表进行
销毁处理,所以在一个查询语句执行完毕后,用户只能看到最后一个查询命令
生成的临时表。
4.在进行多字段分组查询时,从第二个分组字段开始,操作的临时表是上一个分组字段生成的临时表

三、七个查询命令中,哪些命令会导致执行效率过慢:

1.group by(最慢)
【原因】:group by执行时首先将临时表中数据进行【排序】,然后再进行分组
相当于是有两次对表的全部数据进行操作,所以是最慢的
2.order by:
【原因】:需要对select生成的临时表中数据行进行一次【排序】,然后将排好顺序的数据行组成一个全新的临时表
3.where:
【原因】:
需要对表中所有数据行进行遍历。如果临时表中数据行过多话,导致where执行效率非常慢!
4.limit:
【原因】如果指定起始行数过大,导致查询速度变慢
要从第一行开始找到起始行,如果起始行过大,那就代表着需要查询到起始行的时间过长
5.对于多表查询来说,没有指定表文件加载顺序,也会导致查询速度过慢

四、查询命令执行过慢的原因:

1.执行时需要对所有的数据进行排序
2.执行时需要对表中所有数据行进行遍历
3.I/o流加载表文件次数