mysql-sql优化前要明白的知识点
Posted 栗子~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql-sql优化前要明白的知识点相关的知识,希望对你有一定的参考价值。
文章目录
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
mysql-sql优化前要明白的知识点
一、查询过慢的原因的两种情况
1)有规律数据过慢。
比如:在固定时间阶段查询过慢,跟用户集中访问有关。
解决方式:mysql集群。
2)无规律查询过慢,一般是由数据量变化有关系。
解决方案: 查询语句优化。
因此我们在查询定位的时候要根据这两种情况,来分类处理。
当是因为用户集中访问造成的原因,我们一般采用分库、负载均衡的方式来处理;
当发现是无规律查询过慢的时候,我们就需要对我们所写的sql进行优化;
二、判断查询语句是否要优化的依赖工具有哪些?
1)通过慢查询的记录,当前查询语句的执行时间和执行效率来判断语句是否变慢。
2)explain执行计划。
3)相关日志文件。
比如通过日志查询条件来判断用户习惯,即而确认优化方案。
三、mysql查询语句中的七个查询命令特征
根据七个查询命令的优先级进行排名:
(1)from:
【作用】:
1、将硬盘上的表文件加载到内存中,生成一个全新的临时表;
2、定位内存中已经存在的临时表;
【注意】:
1、在一个查询语句中,第一个执行的命令永远是from;
2、from定位的是内存中的一个临时表,这个临时表必须手动指定表名;
(2)where:
【作用】:
1、where命令操作的由from命令生成的临时表;
2、where命令循环遍历当前临时表中每一个数据行,将满足条件的数据行保存到 一个全新的临时表;
【注意】:
1、由于where命令每次操作只是一个数据行,因此在where使用过程中,是无法使用聚合函数作为判断条件;
(3)group by(分组查询命令):
【作用】:
1、首先对临时表中的数据进行一次排序处理,然后将有相同特征的数据行保存到同一个临时表中;
【注意】:
1、多字段分组的时候,首先分组字段的执行顺序对于我们的查询结果来说没有影响,然后对第二个分组字段开始,操作临时表是上一个分组字段生成的临时表;
2、如果select操作的临时表是由当前的group by提供,此时select将遍历group by生成的每一个临时表,在操作具体临时表时,select只会读取指定字段中第一个数据行内容;
(4)having:
【作用】:
1、负责将group by生成的临时表中不满足条件的临时表进行删除操作;
【注意】::
1、having命令不能独立出现,只能出现在group by命令后面;
2、having命令每次操作的是一个临时表,因此选择判断条件应该来自于聚合函数;
(5)select:
【作用】:
1、select操作的临时表,由from、where命令来提供的,select将指定字段中的所有内容读取出来,组成一个全新的临时表;
2、如果select操作的临时表是由当前的group by提供,此时select将遍历group by生成的每一个临时表,在操作具体临时表时,select只会读取指定字段中第一个数据行内容;
(6)order by:
【作用】:
1、专门针对select生成的临时表数据行进行排序,将排序后的内容生成一个全新的临时表;
【注意】:
1、如果order by 使用字段名进行排序时,字段名可以不出现在select生成的临时表中;
2、如果order by 使用字段名顺序进行排序时,索引位置必须在select查询语句中出现;
(7)limit:
【作用】:
1、对临时表中数据行进行截取;
四、mysql中查询语句特征
1、七个查询命令中,除了having命令之外,剩下的六个查询命令执行完毕后都会生成一个新的临时表;
2、七个查询命令中,除了where命令之外,剩下的六个查询命令操作的临时表都是上一个查询命令生成的临时表;
3、在当前查询命令执行完毕后,mysql自动将上一个查询命令生成的临时表进行销毁处理,
因此在一条查询命令执行完毕后,用户只能看到最后一个查询命令生成的临时表;
4、在进行多字段分组查询时,从第二个分组字段开始,操作的临时表是上一个分组字段进行生成的临时表;
五、七个查询命令中,那些命令执行效率过慢
1、执行速度最慢: group by
【原因】:group by执行时首先将临时表中的数据进行【排序】,然后再进行分组。
2、order by
【原因】:需要select生成的临时表中数据行进行一次【排序】然后将排好顺序的数据行组成一个全新的临时表。
3、where
【原因】:需要对表中所有数据行进行遍历,如果临时表中的数据行过多话,导致where执行效率非常慢。
4、limit
【原因】:如果指定行数过大,导致查询速度变慢。
5、对于多表查询来说,没有指定文件加载顺序,也会导致查询速度过慢。
六、查询命令执行过慢的原因
1、执行时需要对所有的数据进行排序
2、执行时需要对表中所有数据行进行遍历
3、I/0流加载表文件次数
以上是关于mysql-sql优化前要明白的知识点的主要内容,如果未能解决你的问题,请参考以下文章
MySQL-SQL优化:主键,order by,group by,limit,count,update