MySQL -索引

  

一、MySQL索引介绍

  

索引是一种数据结构,以其特有的记录数据的方式,为用户提供高性能的查询。索引就像是一本新华字典的目录,通过目录可以快速的找到我们想要找到的数据。

  

二、MySQL主要使用的索引

  
 <代码>普通索引:MySQL中基本索引类型,仅有加速查询功能,允许在定义索引的列中插入重复的值和空值。
  主键索引:有两个功能:加速查询和唯一约束(不可含零)
  唯一索引:有两个功能:加速查询和唯一约束(可含零)
  组合索引:组合索引是将n个列组合成一个索引 
  

三、普通索引

  

1,创建索引

  
 <代码> part1:创建表时创建索引
  创建表的用户(
  nid int not null auto_increment主键,
  名字varchar(50)非空,
  passwd varchar(100)非空,
  额外的文本,
  索引idx1(名字)
  )! [](https://s1.51cto.com/images/blog/201809/14/39334e56fbb24560becb2c8a0ae9cc98.png?x-oss-process=image/watermark, size_16, text_QDUxQ1RP5Y2a5a6i、color_FFFFFF t_100, g_se, x_10, y_10, shadow_90, type_ZmFuZ3poZW5naGVpdGk=)  
  

注意:如果是CHAR、VARCHAR类型,长度可以小于字段实际长度,如果是BLOB和文本类型,必须指定长度。

  
 <代码>第二部分:创建索引
  创建索引idx2 alt=" MySQL -索引"> 

  

八,执行计划

  

解释用于显示SQL执行信息参数,根据参考信息可以进行SQL优化

  
 <代码> mysql>解释select * from t1;
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | | id select_type | | | |表分区类型possible_keys关键| | key_len | ref额外过滤| | | |行
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | 1 |简单t1 | |零|所有零零零零| | | | | | 2 | 100.00 | NULL
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  1行集,警告(0.01秒) 
  

解释列的解释:
select_type:查询类型
表:正在访问的表名
类型:连接类型、性能:& lt;指数& lt;范围& lt;index_merge & lt;ref_or_null & lt;ref & lt;eq_ref & lt;系统/const
possible_keys:显示可能应用在这张表中的索引,也可以是语在句后合适的语句
关键:实际使用的索引
key_len:实际使用的索引的字节长度
行:为了找到所需的内容预估要读取的行数
额外:描述信息如下使用指数
:要查询的列数据仅使用索引中的信息,而没有读取数据表中的信息使用临时
: mysql需要创建一个临时表来存储结果,这通常发生在对不同的列集进行顺序上,而不是组上,这种情况下,需要优化查询
使用filesort:这意味着mysql会对结果使用一个外部索引排序,而不是按索引次序从表里读取行.mysql有两种文件排序算法,这两种排序方式都可以在内存或者磁盘上完成,不解释会告诉你mysql将使用哪一种文件排序,也不会告诉你排序会在内存里还是磁盘上完成。
范围检查每条记录(指数映射:#):没有找到合适的索引,因此对从前面表中来的每一个行组合,#是显示在possible_keys列中索引的位图,并且是冗余的。

  

更多详细信息参见:MySQL官方文档

MySQL -索引