• mysql查询语句分析 explain/desc用法


    explain或desc显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

    explain 数据表 或 desc 数据表

    显示数据表各字段含义

    explain sql 或desc sql

    显示sql执行效率

    使用方法,在select语句前加上explain就可以了,如:

    explain select * from statuses_status where id=11;
    

      

    1,explain列的解释
    table:查询的数据表

    type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和all。

    possible_keys显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从where语句中选择一个合适的语句

    key实际使用的索引。如果为null,则没有使用索引。很少的情况下,mysql会选择优化不足的索引。这种情况下,可以在select语句中使用use index(indexname)来强制使用一个索引或者用ignore index(indexname)来强制mysql忽略索引

    key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好

    ref:显示索引的哪一列被使用了,如果可能的话,是一个常数

    rows:mysql认为必须检查的用来返回请求数据的行数,mysql完成此请求扫描的行数

    extra:关于mysql如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是using temporary和using filesort,意思mysql根本不能使用索引,结果是检索会很慢。

    2,type中各个值解释

    (1)all:全表扫描,MySQL将遍历全表以找到匹配的行

    (2)index:index与ALL区别为index类型只遍历索引树

    (3)range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行。显而易见的索引范围扫描是带有between或者where子句里带有<, >查询。当mysql使用索引去查找一系列值时,例如IN()和OR列表,也会显示range(范围扫描),当然性能上面是有差异的。

    (4)ref,使用非唯一索引扫描或者唯一索引的前缀扫描,返回匹配某个单独值的记录行。

    explain select * from t1 where name='yayun';
    

    (5)eq_ref,类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件。

    explain select t1.name from t1, t2 where t1.id=t2.id;

    (6)const,system,当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。system是const类型的特例,当查询的表只有一行的情况下,使用system。

  • 相关阅读:
    Vue里用moment.js
    回到顶部|回到底部功能的实现(Vue)
    Vue绑定下拉框型的树
    Excel导入数据库前后端代码
    Windows应用程序开发笔记-控制和获取其他程序窗口控件内容
    SQL Server查询、添加、修改表和字段的备注描述
    windows 共享文件夹,和共享打印机
    Visual Studio 2015安装过程卡住,解决办法
    python绘图 初识Python绘图
    GCC、LLVM、Clang
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/6444216.html
Copyright © 2020-2023  润新知