• MySQL-explain


    explain分析

    explain命令是查看优化器如何决定执行查询的主要方法,在查询语句前加explain即可

    explain select * from t where c1 = (select id from t2 where id = 10);
    
    | id |select_type|table|partitions| type | possible_keys | key | key_len | ref |rows| filtered | Extra |
    +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+---------+
    | 1 | PRIMARY    | t    | NULL    | const | PRIMARY      | PRIMARY | 4  | const | 1 | 100.00   | NULL |
    | 2 | SUBQUERY   | t2   | NULL    | const | PRIMARY      | PRIMARY | 4  | const   1 |   100.00 | Using index |
    +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+---------+
    
    

    id:表示表的读取顺序或查询中执行select子句的顺序

    • id相同,可以认为是一组的,执行顺序由上至下
    • id不同,如果是子查询,id序列号会递增,id值越大优先级越大,越先被执行

    select_type:表示select的类型,主要用于区别普通查询、联合查询、子查询等复杂查询

    • simple:简单的select查询,查询中不包括子查询或union
    • primary:查询中若包含任何复杂的子部分,最外层查询标记为primary
    • subquery:select或where列表中的子查询
    • derived:衍生,在form列表中包含子查询,MySQL会递归执行这些子查询,把结果放在临时表里
    • union:如果第二个select出现在union后面,则被标记为union;若union包含在form语句的子查询中,外层select将被标记为derived
    • union result:union的结果集

    table:显示这一步访问的表名,有时候不是真实的表名,是第几步执行的结果

    type:对表的访问方式,表示MySQL在表中找到所需行的方式,常见的访问类型有ALL、index、range、ref、eq_ref、const、system、NULL,从左到右性能从差变好

    • ALL:全表扫描,性能最差,要避免
    • index:全索引扫描,走的是二级索引叶子节点遍历
    • range:索引范围扫描
    • ref:非唯一性索引扫描,返回匹配某个值的所有行
    • eq_ref:唯一性索引扫描,返回匹配某个值的一行。常用于主键或唯一索引扫描,多表中是primary key 或unique key作为关联条件
    • const、system:MySQL对查询某部分进行优化并转换为一个常量时,使用该类型访问。比如id=100,通过索引1次就能找到。system是const类型的特例,当查询的表只有一行的情况下使用
    • NULL:MySQL在优化分解语句时,执行时甚至不用访问表或索引。比如获取索引最大最小值

    possible_keys:指出MySQ能使用那个索引找到行,如果匹配到索引这里就列出

    key:表示MySQL决定使用的索引,如果没有选择索引就是NULL

    key_len:显示索引中使用的字节数

    ref:那些列或常量被用于查找索引列上的值

    rows:表示MySQL根据表统计系统和索引选用情况,估算出要扫描的行数

    Extra:额外信息

    • Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,发生在对表的全部请求列都是同一个索引部分的时候,表示MySQL服务器将在存储引擎检索行后再进行过滤
    • Using temporary:表示MySQL需要使用临时表来存储结果集,常用于排序和分组
    • Using filesort:当包含'order by'但无法利用索引完成排序时称为文件排序,一般是因为order by后面条件导致索引失效
    • Using join buffer:表示使用了连接缓存,比如多表join的次数非常多,就将配置文件中join buffer调大一些。如果出现了这个值,应注意根据具体情况添加索引
    • Using index:只使用索引列中的信息,不需要进一步读取实际的行来获取查询列信息。比如使用了覆盖索引,查询列数小于等于索引个数且包含在索引中。
    • Using Index Condition:表示进行了ICP优化
    情出自愿,事过无悔;不负遇见,不谈亏欠。
  • 相关阅读:
    各种图示的介绍及绘制(boxplot、stem)
    各种图示的介绍及绘制(boxplot、stem)
    Python Tricks(二十二)—— small tricks
    Python Tricks(二十二)—— small tricks
    matplotlib tricks(关闭坐标刻度、坐标轴不可见)
    matplotlib tricks(关闭坐标刻度、坐标轴不可见)
    图灵机(Turing Machine)
    基于TCP/IP的Matlab Modbus与M340 PLC通讯
    hdu1195 Open the Lock (DFS)
    Java菜鸟学习笔记--数组篇(二):数组实例&args实例
  • 原文地址:https://www.cnblogs.com/manliu/p/14683641.html
Copyright © 2020-2023  润新知