MySQL调优学习

1.MySQL配置文件

在这里插入图片描述

2.MySQL的逻辑架构

在这里插入图片描述
MySQL的逻辑架构也是分层处理的,一共分为4层

  1. 连接层,最上层是一些客户端连接服务,包含本地的socket通信 和 基于客户端 服务器 的 TCP/IP通信,完成连接处理,授权认证等服务。该层还提供为连接准备的线程池。
  2. 服务层,完成大多数的核心服务,SQL接口,缓存查询,SQL的分析和优化,实现跨存储引擎的功能。服务器会在该层创建内部解析树,并对其完成优化以及确定查询顺序,是否利用索引,然后生成操作。如果是select还会查询内部缓存。
  3. 存储引擎层,服务器通过API与该层交互,不同存储引擎有不同的功能侧重点,根据作用去选择存储引擎,最常用的是innoDB,MyISAM。
  4. 存储层,通过与存储引擎的交互,把数据存到裸设备的文件系统上

innoDB和MyISAM的区别,面试题
回头补
SQL加载顺序
在这里插入图片描述

3.索引

索引是一种排好序的快速查询的数据结构

1.为什么会有慢查询

  1. 查询语句写的烂
  2. 索引失效
  3. 各种连接join,子查询 太多

7种join连接

在这里插入图片描述
只不过mysql不支持full outer join
图中的全连接 和 左右独有需要 用 union 可以把两条查询的结果连接起来然后去重

  • 全连接:
    select from A left join B on A.key = B.key
    union
    select from A right join B on A.key = B.key

  • 左右独有:
    select from A left join B on A.key = B.key where A.key is null
    union
    select from A right join B on A.key = B.key where B.key is null

2.索引的优势劣势

回头补

3.索引的分类

  • 单值索引,一个索引只包含一个列,一个表可以有多个单值索引
  • 唯一索引,索引列的值必须唯一
  • 复合索引,一个索引包含多个列

4.索引结构

  • BTree树
  • hash
  • full-text
  • R-Tree
    BTree索引
    在这里插入图片描述
    在这里插入图片描述

4.explain怎么玩

mysql中有专门负责优化select语句的优化器模块,mysql query optimizer。他会进行性能分析,然后根据他认为最优的方式执行。
explain是模拟 优化器,可以看到对于当前sql,优化器咋执行的
在这里插入图片描述
包含这些字段
id,表查询顺序,如果是一个查询id都一样,子查询id会递增

  • id相同,从上到下执行
  • id不同,值大的优先执行
  • 既有相同的又又不同的,先执行大的,在从上到下执行相同的
    select_type,区别查询复杂程度
    在这里插入图片描述
    type,啥类型的查询,查询牛逼与否就看这个了

在这里插入图片描述
在这里插入图片描述

  • system,就一行数据的表,叫什么玩意系统表,用不着
  • const,索引查一次就查到了
  • eq_ref, 根据条件查,对应的表里就一条,那就确定只有一条匹配的
  • ref , 根据条件查,表里很多条,得都过一遍,找到所有匹配的,两者区别在于,哪怕最后只有一条匹配,但表是都过了一圈,因为不确定几条
  • range , between , in 在一个范围里找,不如上面那个=精确
  • index , 遍历整个索引树,和all一样都是找了一圈,但是索引树的空间小呀,所以比all牛逼
  • all, 就是遍历全表
    一般来说,最少得保证range级别,最好是ref,在往上也不太现实

possible_key, 就是优化器认为可能用到哪些索引
key, 实际执行了哪些索引
key_len,索引值长度,就是这列类型字节长度,字符类型会考虑字符集,允许为null加一bit,varchar加两bit
ref,执行表的哪个字段
row , 查找了多少行
extra,不适合在其他列显示,但又十分重要的信息,分为
在这里插入图片描述
其中,using filesort 是查询的时候用了索引,但是在排序的时候没用到索引,是很有可能引起mysql的性能问题的,
解决:

1.尽量把 order by的功能放在代码里做
2.把 order by的字段放在索引里面
3.注意> < 后面的索引会失效
using temporary,使用了临时表来保存中间信息,效率非常低,出现这个字段表示sql是烂sql
using index,表示sql非常好,也叫覆盖索引,就是只通过索引就取得了查询的字段,不用去读数据文件。

建立索引

两表查询的关联字段,如果是左连接就建在右表,右连接建在左表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值