MySQL 优化 (一) --------- MySQL 优化概述


一、查询过慢原因

1.有规律速度过慢

用户访问量激增 ,解决 :mysql 集群

2.无规律速度过慢

跟表中数据量变化有关系,解决 :查询语句优化

二、判断查询语句是否需要优化依赖工具

  • 慢查询记录

  • explain 执行计划

  • 相关日志文件

三、MySql 查询语句中七个查询命令特征

以下根据七个查询执行优先级进行排序

  • from

作用:
1.将硬盘上的表文件加载到内存中,生成一个全新的临时表
2.定位内存中已经存在的临时表

注意:
1.在一个查询语句中,第一个执行命令永远都是 from
2.from 定位的是内存中一个临时表,这个临时表必须受到指定表名

  • where

作用 :
1.where 命令操作的由 from 命令生成的临时表
2.where 命令循环遍历当前临时表中每一个数据行将满足条件的数据行保存到一个全新的临时表

注意 :
1.由于 where 命令每次操作只是一个数据行,因此在 where 使用过程中是无法使用聚合函数作为判断条件

  • group by

作用 :
1.首先对临时表中数据进行一次排序处理
2.然后将具有相同特征的数据行保存到同一个临时表

注意 :
1.多字段分组:首先分组字段执行顺序对于查询结果来说没有任何影响的,然后从第二个分组字段开始,操作临时表是上一个分组字段生成的临时表
2.如果 select 操作的临时表是由 group by 提供,此时 select 将遍历 group by 生成的每一张临时表在操作具体临时表时,select 只会读取指定字段中第一个数据行内容

  • having

作用 :
负责将 group by 生成的临时表中不满足条件的临时表进行删除

注意:
1.having 命令不能独立出现的,只能出现在 group by 命令后面
2.having 命令每次操作的是一张临时表,因此选择判断条件来自聚合函数

  • select

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

  • order by

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

注意 :
1.如果 order by 使用字段名进行排序时,字段名可以不出现在 seelct 生成的临时表
2.如果 order by 使用字段顺序进行排序时,索引位置必须在 select 查询语句中

  • limit

作用 :
对临时表中数据行进行截取

四、查询语句特征

七个查询命令中,除了 having 命令之外。剩下的六个查询命令执行完毕后都会生成全新的临时表。

七个查询命令中,除了 from 命令外,剩下的六个查询命令操作的临时表都是上一个查询命令生成临时表。

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

在进行多字段分组查询时,从第二个分组字段开始,操作的临时表是上一个分组字段生成的临时表中。

五、七个查询指令中,哪些命令的执行效率过慢

1、执行效率最慢 :group by

原因 : 执行时首先将临时表中数据进行排序,然后再进行分组

2、order by

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

3、where

原因 :需要对表中所有数据进行遍历。如果临时表中数据行过多话,导致where执行效率非常慢

4、limit

原因 :如果指定起始行数过大,导致查询速度变慢

又:对于多表查询来说,没有指定表文件加载顺序,也会导致查询速度过慢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值