1.2执行计划获取和分析
获取语句的执行计划工具,只针对索引应用和优化器算法应用部分信息。
explain ##命令
desc ##命令
语法 desc explain format=json select fom t100w
format=json ## 结果可以以json的形式进行显示,可加,可不加 估算
format=tree ## 按照树形的结构进行显示 估算
desc analyze select from t100w where num=913759 and k1>’zz’ and
k2=’EFfg’; ## analyze 这个是实际的执行计划 如果实际跟估算差距很大可能是统计信息不准确(生产慎用会真的执行这个语句)
执行计划字段解释:
id :从上至下,从大到小执行
cost=数值 :是代价
table :此次查询访问的表
type :索引查询的类型(从慢 到快进行的排序
ALL 全表扫描、index全索引扫描,类似于全表、range索引范围扫描、ref 辅助索引等值查询、eq_ref、const(system)点查很精准、NULL)
possible_keys :可能会应用的索引
key : 最终选择的索引
key_len :索引覆盖长度,主要是用来判断联合索引应用长度。
rows :需要扫描的行数
Extra :额外信息
2. 如何计算列的key_len
2.1key_len=a+b+c
列的key_len长度,按照每列的最大预留长度来做的计算。
最大存储预留长度(字节):
———————————————————————————————————————-
数据类型 : 占用字节量 有not null 没有Not Null
———————————————————————————————————————-
数字类型:
tinyint : 1字节 1 1+1
int : 4字节 4 4+1
bigint : 8字节 8 8+1
———————————————————————————————————————-
字符串类型:
utf8:
char(10) : 103字节 =30 30 30+1
varchar(10) : 103+2字节=32 32 32+1
———————————————————————————————————————-
utf8mb4:
char(10) :104字节 =40 40 40+1
varchar(10) :104字节+2 =42 42 42+1
——————————————————————————————————————-
判断MEM,CPU,IO的代价进行查看现在用的比较少
mysql> set profiling=1; ##打开内存 IO CPU代价的记录
mysql> select * from t100w where num=913759 ;
mysql> show profiles; ##查看 代价信息
mysql> show profile for query 1; ##查询全部信息
mysql> show profile cpu for query 1; ## cpu的延迟情况分为用户态和内核态
mysql> show profile block io for query 31; ##磁盘延迟,in是到内存的 读是in out是写入
mysql> show profile memory for query 3; ##内存延迟
3,执行计划应用场景
3.1数据库慢:
a. 应急性的慢: 突然数据库就慢了下来,可能在执行有问题的sql或者就是在执行大sql
top—->show full processlist; ——> 慢语句 ——> explain SQL —-> 优化索引、改写语句
判断cpu,内存是否高,查看当前那个进程慢,锁定到慢点语句
b. 间歇性慢。 某一段时间慢
slowlog ——> 慢语句 —-> explain SQL —-> 优化索引、改写语句
