zoukankan      html  css  js  c++  java
  • mysql之explain

    https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain-extra-information
    使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈。
    在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。
    注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。

    type列

    这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。
    依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL
    一般来说,得保证查询达到range级别,最好达到ref

    index性能为什么比较靠后

    是指用到了索引,是index类型的方式:这种类型表示是mysql会对整个该索引进行扫描。要想用到这种类型的索引,对这个索引并无特别要求,只要是索引,或者某个复合索引的一部分,mysql都可能会采用index类型的方式扫描。但是呢,缺点是效率不高,mysql会从索引中的第一个数据一个个的查找到最后一个数据,直到找到符合判断条件的某个索引。https://www.zhihu.com/question/36996520/answer/93256153

    正常利用到索引的类型

    ref:这种类型表示mysql会根据特定的算法快速查找到某个符合条件的索引,而不是会对索引中每一个数据都进行一 一的扫描判断,也就是所谓你平常理解的使用索引查询会更快的取出数据。

    key列

    这一列显示mysql实际采用哪个索引来优化对该表的访问。
    如果没有使用索引,则该列是 NULL

    key_len列

    这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了联合索引中的哪些
    列。
    key_len计算规则如下:
    字符串
    char(n):n字节长度
    varchar(n):可变数据类型.最大n个字符。n字节长度,2字节存储字符串长度,如果是utf-8,则长度 3n + 2

    数值类型
    tinyint:1字节
    smallint:2字节
    int:4字节
    bigint:8字节 
    时间类型
    date:3字节
    timestamp:4字节
    datetime:8字节
    如果字段允许为 NULL,需要1字节记录是否为 NULL
    索引最大长度是768字节,当字符串过长时,mysql会做一个类似左前缀索引的处理,将前半
    部分的字符提取出来做索引。

    ps:在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。
    https://blog.csdn.net/u010385646/article/details/50445291

    Extra

    https://blog.csdn.net/z69183787/article/details/53393153
    https://www.cnblogs.com/wy123/p/7366486.html
    Using index 查询的列被索引覆盖,并且where筛选条件是索引的是前导列(联合索引中的第一个字段),直接访问索引就足够获取到所需要的数据
    Using index condition:用到了索引,但需要通过索引回表查询数据(用到索引的范围查询情况)。
    Using where Using index:是一个非常模糊的东西,只是表示:无法“直接”通过索引直接查询到符合条件的数据。
    Using where:没有用到了索引,使用 where 语句来处理结果,查询的列未被索引覆盖(type为ALL)
    Using temporary:mysql需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的,首先是想到用索引来优化。

  • 相关阅读:
    Java 源码刨析
    qemu-guest-agent详解
    Java 源码刨析
    NTP服务解析
    virsh常见命令笔记
    Ansible之playbook
    ansible模块详解
    HashMap详解
    Mysql-Incorrect string value
    web开发中前后端传值
  • 原文地址:https://www.cnblogs.com/cashew/p/11989285.html
Copyright © 2011-2022 走看看