美文网首页
MySQL 索引分类 Explain解释

MySQL 索引分类 Explain解释

作者: 攻城狮托马斯 | 来源:发表于2020-05-26 16:07 被阅读0次

    五种索引:


    普通索引:一个索引只包含单个列

    唯一索引:索引列的值必须是唯一, 某个字段不能出现重复的值,比如身份证列,但可以出现一个null值 

    复合索引: 一个索引包含多个列

    聚簇索引(聚集索引): B+Tree, InnoDB,数据和Index放在一起

    非聚簇索引: 不是聚簇索引,就是非聚簇索引.(MyIsam, 数据和索引是分开的)

    基础语法


    查看索引:

    SHOW INDEX FROM table_name \G

    创建索引:

    CREATE [UNIQUE] INDEX indexName ON mytable(columnname(length));

    ALTER TABLE 表名 ADD [UNIQUE] INDEX [indexName] ON (columnname(length)))

    删除索引:

    DROP INDEX [indexName] ON mytable

    执行计划:首先看执行计划,而不是看语句猜执行计划


    模拟优化器执行SQL查询语句,从而知道MySQL是如何分析语句。 分析查询语句或是表结构的性能瓶颈

    EXPLAIN + SQL语句:

    1.表的读取顺序

    2.数据库操作的操作类型

    3.哪些索引可以使用

    4.哪些索引被实际使用

    5.表之间的引用

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


    表的读取顺序 // 有三种情况

    id相同的情况下,按顺序执行,由上往下执行

    id不相同的的情况下,id越大的越先执行.


    Select Type(查询类型)

    Primary: 首次查询

    SubQuery: 子查询

    Derived:由子查询产生的表,再在衍生表上进行查询.

    Union: 两个表集合

    Union Result是ID 1, 2的表的合集

    Type

    访问类型,较为重要的一个指标

    system > const > eq_ref > ref > range > index > ALL(全表扫描)

    system: 表里面就一条记录

    const: 通过索引一次就找到了

    eq_ref: 通过主键或唯一索引找到, 索引不存在重复

    ref: 非唯一索引, 索引存在重复,所以需要对同样的索引进行遍历或者返回多行

    range: 查询一个数据段中的

    index: 索引表扫描,效率比ALL高一点点

    ALL: 全表扫描,把叶子节点所有的数据都拿出来


    Possible_keys / Key:

    Possible_key: 可能用到的key

    Key: 真正用到的索引

    是否充分用到了索引: 看key_length, 如果充分用到了索引,那就一定比没有充分用到索引的key_length要长.


    key_len:与char/varchar, 字符集, 长度, 是否为null相关

    为null: + 1

    varchar: + 2(有标识符位置)

    ucf-8: 每个字符3字节

    其他的都可以按照数据类型来算,不需要乘以长度, 如果为null再加一


    Ref和Extra Info不是很懂

    ref: 索引的哪一列被使用了,可能的话是一个常数,不是很懂


    十分重要的额外信息:

    Using fileSort: 如果索引用ABC排序,然后使用者在没有其他索引的情况下,用C,A排序,就会出现fileSort.

    Using Temporary: 使用临时表,一般用Group By用临时表进行排序.

    Using Index: 用到了覆盖索引.

    相关文章

      网友评论

          本文标题:MySQL 索引分类 Explain解释

          本文链接:https://www.haomeiwen.com/subject/vwpmahtx.html