美文网首页
MySql索引

MySql索引

作者: 凌雲木 | 来源:发表于2018-05-05 10:14 被阅读25次

    索引是一个单独的,存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。使用索引用于快速找出在某个或多个列中有一定特定值的行。
    MySql中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关。MyISAM和InnoDB引擎只支持BTREE索引。MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。

    explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
    未使用索引之前,一条sql查询过程:

    mysql> explain select * from user  where name='小王' \G;
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: user
       partitions: NULL
             type: ALL
    possible_keys: NULL
              key: NULL
          key_len: NULL
              ref: NULL
             rows: 7
         filtered: 14.29
            Extra: Using where
    1 row in set, 1 warning (0.00 sec)
    

    explain各行解释:

    • id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.

    • select_type: SELECT 查询的类型.,这里为SIMPLE,表示为简单的查询,不使用UNION或者子查询

    • table: 查询的是哪个表,按读取的先后顺序排列

    • partitions: 匹配的分区

    • type: 指定了本数据表与其他数据表之间的关联关系。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL

    • possible_keys: 此次查询中可能选用的索引

    • key: 此次查询中确切使用到的索引.

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

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

    • rows: 显示此查询一共扫描了多少行. 这个是一个估计值.

    • filtered: 表示此查询条件所过滤的数据的百分比

    • extra: 额外的信息

    当在表name列加一个索引时


    image.png
               id: 1
      select_type: SIMPLE
            table: user
       partitions: NULL
             type: ref
    possible_keys: sy_name
              key: sy_name
          key_len: 767
              ref: const
             rows: 1
         filtered: 100.00
            Extra: NULL
    1 row in set, 1 warning (0.06 sec)
    
    ERROR:
    

    rows: 显示此查询一共扫描了多少行. 这次就扫描的一行,不加索引时,全部扫描一遍。

    相关文章

      网友评论

          本文标题:MySql索引

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