• mysql之explain用法


    一、使用方法:EXPLAIN +sql语句;

    EXPLAIN SELECT * FROM t1;

    二、功能:EXPLAIN 是什么?查看表的执行计划

    三、详解: EXPLAIN 能干嘛?

    (1)表的读取顺序

    (2)数据读取操作的操作类型

    (3)哪些索引可以使用

    (4)哪些索引被实际使用

    (5)表之间的引用

    (6)每张表有多少行被优化器查询

    explain输出解释:
    +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+
    | id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra |
    +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+

    一.id:select查询的序列号,表示执行表的先后顺序。

    (1).id相同时,执行顺序是由上至下。

    EXPLAIN SELECT  t2.* FROM  t3,t1,t2  WHERE  t2.m_id=t1.m_id AND t2.m_id=t3.m_id;

    执行结果:

    (2)id不同时,序号越大,优先级越高,越被优先执行,

    EXPLAIN SELECT t2.* FROM t2 WHERE 
    m_id=(SELECT m_id FROM t1 WHERE 
    m_id=(SELECT m_id FROM t3 WHERE t3.m_id=5));

    (3)id相同不同同时存在时,值越大越先执行,值相同的由上而下执行

    EXPLAIN SELECT t2.* FROM 
    (SELECT t3.m_id FROM t3 ) s1,t2
    WHERE s1.m_id =(SELECT m_id FROM t1 WHERE t1.m_id=5);

    二、select_type(数据读取的操作类型)

          示查询中每个select子句的类型

    (1) SIMPLE(简单SELECT,不使用UNION或子查询等)

    (2) PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)

    (3) UNION(UNION中的第二个或后面的SELECT语句)

    (4) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)

    (5) UNION RESULT(UNION的结果,union语句中第二个select开始后面所有select)

    (6) SUBQUERY(子查询中的第一个SELECT,结果不依赖于外部查询)

    (7) DEPENDENT SUBQUERY(子查询中的第一个SELECT,依赖于外部查询)

    (8) DERIVED(派生表的SELECT, FROM子句的子查询)

    (9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)

    三、type类型

    代表访问类型,MySQL内部将其分为多类型,常用的类型从好到差的顺序展示如下:

    system->const->eq_ef->ref->fulltext->ref_or_null->index_merge->unique_subquery->index_subquery->range->index->ALL;

    而在实际开发场景中,比较常见的几种类型如下:const->eq_ref->ref->range->index->ALL(顺序从好到差),通常优化至少在range级别或以上,比如ref算是比较不错的啦;

    上面说到的从好到差指的是查询性能。

  • 相关阅读:
    cs ip 通过jmp转移命令间接赋值。无法直接对其赋值。
    8086 cpu为什么要把段地址*16+偏移量形成物理地址呢?
    保护模式和实模式的区别
    计算机的内存是以字节为单位的, 这个认知很重要。
    计算机的内存是以字节为单位的。
    一个字 word 是16位, 一个字由两个字节组成 , 字节=byte ,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit
    物理地址为20位 如10000H 用段地址*16+偏移地址表示
    深入学习Java线程池
    在线考试系统镜像构建、推送、部署
    容器 变成镜像提交到阿里云镜像仓库
  • 原文地址:https://www.cnblogs.com/mimeng/p/14529811.html
Copyright © 2020-2023  润新知