• ADADADADAD

    MySQL中如何使用EXPLAIN命令[ mysql数据库 ]

    mysql数据库 时间:2024-11-26 22:15:42

    作者:文/会员上传

    简介:

    explain显示了mysql如何处理select语句以及连接表。下面是explain命令的一个例子:C:\Users\duansf>mysql -u root -pEnter password: ******Welcome to the MySQL monitor.

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    explain显示了mysql如何处理select语句以及连接表。

    下面是explain命令的一个例子:

    C:\Users\duansf>mysql -u root -p
    Enter password: ******
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.5.13 MySQL Community Server (GPL)


    Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.


    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.


    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


    mysql> use test
    Database changed
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | workinfo|
    +----------------+
    1 row in set (0.00 sec)


    mysql> explain select * from workinfo\G
    *************************** 1. row ***************************
    id: 1
    select_type: SIMPLE
    table: workinfo
    type: ALL
    possible_keys: NULL
    key: NULL
    key_len: NULL
    ref: NULL
    rows: 1
    Extra:
    1 row in set (0.00 sec)


    mysql>


    1、id
    SELECT识别符,这是SELECT查询序列号。这个不重要,查询序号即为sql语句执行的顺序


    2、select_type
    select类型,它有以下几种值:
    simple:它表示简单的select,没有union和子查询
    primary:最外面的select,在有子查询的语句中,最外面的select查询就是primary
    union:union语句的第二个及以后的子查询
    dependent union:UNION中的第二个及以后的子查询语句,取决于外面的查询
    union result:UNION的结果
    subquery:子查询中的第一个select语句
    dependent subquery:依赖于外查询的子查询中的第一个select
    derived:子查询衍生出来的表
    materialized:物化子查询
    uncacheable subquery:不能被缓存,需要重新评估的子查询
    uncacheable union:union中第二个及以上的uncacheable subquery中需要重新评估的子查询


    3、table
    输出的行所用的表


    4、type
    连接类型
    system:表仅有一行,这是const类型的特列,平时不会出现,这个也可以忽略不计
    const:表最多有一个匹配行,const用于比较primary key 或者unique索引。因为只匹配一行数据,所以很快。记住一定是用到primary key或者unique,并且只检索出两条数据的情况下才会是const
    eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY"。eq_ref可以用于使用=比较带索引的列。
    ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。
    fulltext:使用全文索引
    ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。
    index_merge:该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。
    unique_subquery:在带有in的子句中用来代替ref
    index_subquery:类似于unique_subquery,查询条件
    range:给定范围内的检索,使用一个索引来检查行,用到=、<>、>、<、>=、<=、is null、<=>、between、in
    ALL:对于每个来自于先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const的表,这通常不好,并且通常在它情况下很差。通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常数值或列值被检索出。
    index:该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。(也就是说虽然all和Index都是读全表,但index是从索引中读取的,而all是从硬盘中读的)


    5、possible_keys
    提示使用哪个索引会在该表中找到行


    6、keys
    查询实际用到的索引


    7、key_len
    实际用到的索引长度

    8、ref
    ref列显示使用哪个列或常数与key一起从表中选择行。

    9、rows
    显示执行查询的行数,,数值越大越不好,说明没有用好索引

    10、Extra
    查询语句的额外信息

    MySQL中如何使用EXPLAIN命令.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: explainmysql