explain分析SQL语句

一. 影响服务器性能的几个方面

  1. 服务器硬件
  2. 服务器的操作系统
  3. 数据库存储引擎的选择
  4. 数据库操作配置
  5. 数据库结构设计和SQL语句

二. SQL性能下降的原因

  1. 查询语句写的不好
  2. 索引失效
  3. 关联太多的jion
  4. 服务器调优和参数设置(一般是DBA来做的)

三.SQL读取顺序

  1. 不是从select开始,而是从from开始,要先知道你要读的是那张表才可以进行下一步
  2. 机读顺序
    在这里插入图片描述

四.MySQL常见瓶颈

CPU: CPU在饱和的时候一般发生在数据装入内存或从磁盘读取数据的时候
IO: 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候
服务器硬件的性能瓶颈

五. explain 分析SQL语句

5.1 explain 是什么?

模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句,有多个字段,通过查看字段可以知道你的SQL语句的问题在哪里

5.2 explain 怎么玩?

explain+ SQL语句(查询语句)
在这里插入图片描述

5.3 explain可以干什么?
  1. 表的读取顺序(id)
  2. 数据读取操作的操作类型(select_type)
  3. 可能用到的索引(possible_keys)
  4. 实际被用到的索引(key)
  5. 表之间的引用
  6. 每张表有多少行被优化器查询(rows)

六. explain字段分析

6.1 表的读取顺序id

id不同: id越大就越先被执行
id相同: 自上而下执行

6.2 数据操作读取类型(select_type)
  1. simple 简单的select查询,查询中不包含子查询或者union

  2. primary 查询中若包含任何复杂的子部分,最外层查询则被标记。最后执行那个

  3. subquery 在select或where列表中包含了子查询

  4. union 若第二个select出现在union之后,则被标记为union

  5. union result 从union表获取结果的select

6.3 table操作的那张表
6.4 partitions-查询访问的分区
6.5 type

从最好到最坏
system > const > eq_ref > ref > range > index > ALL
system:表只有一行记录 (相当于系统表),相当于const的特例
const:通过一次索引就可以找到
在这里插入图片描述
eq_ref 唯一索引扫描,对于每个索引键,表中只有一条记录与之匹配
ref 非唯一性索引扫描,返回匹配某个单独值得所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行
range 只检索给定范围的行,使用一个索引来选择行。
index :只要查询那个字段建有索引,不管后面什么条件
ALL全盘扫描,最慢

6.6 possible_keys: 显示可能应用在这张表中的索引,一个或多个。

6.7 key: 实际使用的索引。如果为null,则没有使用索引

6,8 extra: 就是一些额外的消息,告诉你用了什么方法进行查找,有以下几种方法
Using filesort 说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,MySQL中无法利用索引完成的排序操作称为"文件排序"
Using temporary,使用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。
Using index:: 使用了索引,避免了全表扫描
Using where: 使用了where过滤
Using join buffer: 使用了连接缓存
impossible where: 不可能的条件,where子句的值总是false
6.8 ref: 显示索引那一列被用到了
6.9 rows一共有多少行被执行优化器执行到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值