• mysql explain


    mysql> explain select * from siteinfo;

    +----+-------------+----------+------+---------------+------+---------+------+--------+-------+

    | id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows   | Extra |

    +----+-------------+----------+------+---------------+------+---------+------+--------+-------+

    |  1 | SIMPLE      | siteinfo | ALL  | NULL          | NULL | NULL    | NULL | 902310 |       | 

    +----+-------------+----------+------+---------------+------+---------+------+--------+-------+

    只说type

    system:

            表仅有一行,这是const连接类型的一个特例

    const:

            const用于常数值比较primary key时,单查询的表仅有一行时,使用system

    eq_ref:

            除const类型外最好的可能实现的连接类型 它用在一个索引的所有部分被连接使用并且索引是unique或primary key

           对于每一个索引键,表中只用一条记录与之匹配

    ref:

           连接不能基于关键字选择单个行,可能查找到多个符合条件的行。叫做ref是因为索引要跟某个参考值相比较。

           这个参考值或者是一个常数,或者是来自一个表里的多表查询的结果值。

    ref_or_null:

            如同ref,但是MySQL必须在初次查找的结果里找出null条目,然后进行二次查找。

    index_merge:

            说明索引合并优化被使用

    unique_subquery: 

            在某些IN查询中使用此种类型,而不是常规的ref: 

            value IN (SELECT primary_key FROM single_table WHERE some_expr) 

    index_subquery:

            在某些IN查询中使用此种类型,与unique_subquery类似,但是查询的是非唯一性索引: 

            value IN (SELECT key_column FROM single_table WHERE some_expr) 

    range:

            只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。当使用=、<>、>、>=、<、<=、

            IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range。

    index:

                全表扫描,只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序,但是开销仍然非常大。

    all:
         全表扫描

    possible key : 可能使用到的索引

    key : 实际使用到的索引

           MySQL实际从possible_key选择使用的索引。如果为NULL,则没有使用索引。

           很少的情况下,MYSQL会选择优化不足的索引。

           这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引

           或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引

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

    ref: 说明索引的哪一列被使用了,

    rows: 检索的行数

    extra项:

         userfilesort

                 表示MySQL会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容。

                 可能在内存或者磁盘上进行排序。MySQL中无法利用索引完成的排序操作称为“文件排序”。

          using temporary

                表示MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。

    摘自: http://wenku.baidu.com/view/f7335cc8da38376baf1fae5d.html

  • 相关阅读:
    如何使用Redis实现分布式缓存
    如何使用Swagger生成API文档
    Asp.Net Core WebApi入门
    如何使用Entity Framework Core实现增删改查(CRUD)
    Microsoft.Extensions.DependencyInjection入门
    什么是中介者模式
    什么是依赖注入
    什么是事件总线
    点滴智慧
    并查集
  • 原文地址:https://www.cnblogs.com/allenhaozi/p/4508418.html
Copyright © 2020-2023  润新知