zoukankan      html  css  js  c++  java
  • MySQL的Explain

    Explain

    使用EXPLAIN关键字可以模仿优化器执行SQL查询语句,从而知道MySQL是如何处理SQL语句,分析SQL语句的性能瓶颈出现在哪里。

    显示信息

    id

    select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。

    id相同,执行顺序由上至下。id不同(子查询的时候),id值越高,优先级越高,越先执行。

    select_type

    select_type,查询类型,用于区别普通查询、联合查询、子查询等复杂查询。

    • SIMPLE,简单SELECT查询,不包含子查询和UNION
    • PRIMARY,查询中包含子查询,最外层标记为PRIMARY
    • SUBQUERY,子查询标记为SUBQUERY
    • DERIVED,临时表的衍生
    • UNION,第二个SELECT出现在UNION之后,则标记为UNION
    • UNION RESULT,从UNION表获取结果的SELECT
    table

    显示是哪张表

    type

    访问类型。system>const>eq_ref>ref>range>index>ALL

    保证查询达到range级别,最好达到ref。

    • system,表只有一行记录,等于系统表
    • const,表示通过索引一次就找到了记录
    • eq_ref,联表查询,表中只有一条记录与索引键匹配
    • ref,返回所有匹配某个单独值的行
    • range,只检索给定范围的行
    • index,只遍历整个索引树
    • ALL,扫描整个表
    possible_keys

    显示可能应用在这张表中的索引,一个或多个。查询设计到的字段若存在索引,则该索引将被列出,但不一定被实际查询使用。

    key

    实际使用的索引。可以用来判断索引是否失效。

    key_len

    表示索引中使用的字节数,可以通过该列计算查询中使用的索引的长度。越少越好。

    ref

    显示索引的哪一列被使用了。

    rows

    大致估算找到所需的记录所需要读取的行数。

    Extra

    包含不适合在其他列显示但十分重要的额外信息。

    • Using filesort,对数据使用一个外部的索引(文件排序)排序,不是按照表内的索引顺序。
    • Using temporary,使用了临时表保存中间结果用于排序或分组,常见group by和order by。
    • Using index,表示相应的select使用了覆盖索引,避免访问了表的数据行。
    • Using where,使用了where过滤
    • Using join buffer,使用了连接缓存
  • 相关阅读:
    Django admin的一些有用定制
    django后台中如何在result_list内优雅的显示及使用过滤器?
    DataFrame 的函数
    pandas的替换和部分替换(replace)
    HTML5中的Web Notification桌面右下角通知功能的实现
    sqlalchemy 实现select for update
    SQLAlchemy 使用经验 (查询 事务 锁表)
    concat()
    某数据防泄漏 越权修改管理员密码
    齐治堡垒机 远程命令执行漏洞[CNVD-2019-20835]
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12587535.html
Copyright © 2011-2022 走看看