mysql高级学习explain学习

本文将详细探讨MySQL的安装优化、my.cnf参数调整、主从复制与日志管理,重点讲解索引分类与创建技巧,以及SQL执行顺序和explain的使用。适合进阶学习MySQL性能调优。

安装

  1. 是否安装
    rpm -qa|grep -i mysql
  2. -ivh
    rpm -ivh: install visual h:进度条
  3. 用户组
    id userName: 根据用户名查找用户
    在这里插入图片描述在这里插入图片描述
    安装不在详述. 主要学习的是高级部分. 这部分自己百度去吧

mysql 目录

各种相关的目录
通过 rpm 安装的话
在这里插入图片描述

my.cnf

在这里插入图片描述
这里的 sort_buffer_size 和 read_buffer_size 的大小
也是优化的一部分

日志

主从复制

log-bin

错误日志

log-error

查询日志

log

存储文件

.frm: 表结构
.myd,:  数据
.myi:    索引

架构

在这里插入图片描述

1. 连接层
2. conn pool
3. ManagementUtil
	备份,容灾恢复,安全,复制,集群
4. SQL interface
	存储过程,SQL触发器
5. Parser
	解析器
6. Optmizer
	mysql 优化器
7. Cache & Buffers
8. pluginables
	存储引擎可拔插

SQL执行加载顺序

FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number> 

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

索引

聚集,覆盖,次要,复合,前缀,hash

分类

单值索引
唯一索引
复合索引

语法

在这里插入图片描述

创建索引的情况

在这里插入图片描述

explain

在这里插入图片描述

id: 查询中执行 select 子句或操作表顺序
	id相同: mysql 加载表顺序由上至下
	id不同: 先加载id值较大的.
	id相同不同:
		先执行id值大的.
		如果id值相同,由上至下执行

延伸续表 <derived2>
这里的2就是 id == 2
在这里插入图片描述

select_type

在这里插入图片描述
主要用于 查询类型. 普通查询,联合查询,子查询

SIMPLE: 简单查询
	查询中不包含子查询或 UNION
PRIMARY: 主键查询
	查询中包含复杂子查询,最外层标记为PRIMARY
SUBQUERY: 子查询
	在 select 或 where 中包含了子查询
DERIVED: 联合查询
	在 FROM 列表中包含的子查询被标记为 DERIVED. mysql 会递归执行这些子查询,把结果放在临时表中
UNION: 
	第二个 select 出现在 UNION 之后,则被标记为 UNION.
	若UNION包含在FROM子句的子查询之中,则外层的SELECT被标记为 UNION
UNION RESULT:
	从 UNION 表获取结果的 SELECT

type

在这里插入图片描述

system: 忽略不计.理论上会出现
const: 表示通过索引一次即可找到. 用于比较primary key 所用和 unique 索引.
eq_ref: 唯一性索引扫描. 每个索引建,表中只有一条记录与之匹配.常用于主键或唯一索引扫描
ref: 非位移性索引扫描. 返回匹配某个单独值的所有行

在这里插入图片描述

range: 只检索给定范围的行. 使用一个索引来选择行.
	一般是 where 语句中出现了 between ,<,	>, in 等查询会出现
possible_keys: 显示可能应用在这张表的索引. 以及 查询涉及到字段上若存在索引,则显示出来
key:  实际使用的索引. 如果查询使用了覆盖索引,则该索引仅出现在 key 列表中
覆盖索引; 查询字段和复合索引中字段的顺序一致
key_len: 索引的长度.索引使用了多少字节. 是根据表定义计算所得.而不是通过表内检索所得
key: 实际使用到的索引
ref: 显示索引的哪一列被使用了. 可能的话是一个常数.哪些列或常数用于被查找索引列上面的值.
rows: 大致估算出找到所需记录数所需要读取的行数
Extra: 
	额外的信息. 之前的字段不足以填充

Extra

在这里插入图片描述

Using filesort: mysql 会对数据使用一个外部的索引排序. 不是按照表内的索引顺序进行读取.
	无法利用索引完成的排序称为 "文件排序"
Using temporary: 使用了临时表保存中间结果. MySql 在对查询结果排序时使用临时表. 常见于 order by 和 group by
Using index: 表示响应的 select 操作中使用了 覆盖索引. 避免了访问表的数据行. 
	如果同时出现了 using where. 表示索引被用来执行索引键值

覆盖索引

select 的数据列只从索引中就能够取得.不必读取数据行. mysql 可以利用索引返回 select 列表中的字段.
	要查询的列被所建立的索引覆盖

Using where

... ...

using join buffer

链接使用了缓存

impossible where

where 的值是false.不能用来获取数据.

select tables optimized away

在没有group by 的情况下对索引优化做了一个操作

distinct

优化 distinct . 在找到第一个元祖的时候就收工
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值