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操作的临时表,由form或者where命令来提供的,select将指定字段中所有内容读取出来,将读取的内容组成一个全新的临时表;
2)select操作的临时表,由group by或者having命令来提供的,此时select将遍历生成的每一个临时表,在操作具体临时表时,select只会读取指定字段中第一个数据行的内容;
6. order by
作用:专门针对select所生成的临时表中数据行进行排序,将排序后的内容组成一个全新的临时表;
注意:
1)如果order by使用字段名称进行排序时,这个字段名可以不出现在select生成的临时表中;
2)如果order by使用字段顺序进行排序时,索引位置必须在select查询语句中出现;
7. limit
作用:对临时表中数据行进行截取
查询语句特征:
1、七个查询命令中,除了having命令之外,剩余的六个查询命令执行完毕后都会生成全新的临时表;
2、七个查询命令中,除了from命令之外,剩余的六个查询命令操作的临时表都是上一个查询命令生成的临时表;
3、在当前查询命令执行完毕后,MySQL会自动地将上一个查询命令生成的临时表进行销毁处理,所以在一个查询语句执行完毕后,用户只能看到最后一个查询命令生成的临时表;
4、在进行多字段分组查询时,从第二个分组字段开始,操作的临时表时上一个分组字段所生成的临时表;
static/image/hrline/4.gif
七个查询命令中,较慢的关键词
查询效率越慢的关键词排序在最前
1. group by
原因:group by 执行时首先将临时表中数据进行“排序”,然后再进行分组;
2. order by
原因:需要对select生成的临时表中的数据行进行一次“排序”,然后将排序后的数据行组成一个全新的临时表;
3. where
原因:需要对表中所有数据行进行遍历,如果临时表中数据行过多的话,就会导致where执行效率非常慢;
4. limit
原因:如果指定的起始行数过大,也会导致查询速度变慢;
5. 对于多表查询来说,没有指定表文件加载顺序,也会导致查询速度过慢;
查询命令执行过慢的原因总结:
1. 执行时需要对所有的数据进行排序;
2. 执行时需要对表中所有数据行进行遍历;
3. I/O流加载表文件的次数;
页:
[1]