MySql索引

索引是一个单独的,存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。使用索引用于快速找出在某个或多个列中有一定特定值的行。
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列加一个索引时


MySql索引_第1张图片
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索引)