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) : 10
    3+2字节=32 32 32+1
    ———————————————————————————————————————-
    utf8mb4:
    char(10) :104字节 =40 40 40+1
    varchar(10) :10
    4字节+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 —-> 优化索引、改写语句