在讲解Mysql的索引之前,先来了解一下什么是索引?
索引是对数据库中表的一列或者多列的值进行排序的一种数据结构,如果把数据库中的表比作一本书的话,索引就是这本书的目录,通过索引可以很快速的查找到书中指定内容所在的位置
那么Mysql中的索引具体都有哪些呢?
首先从逻辑角度来看分为
(1).普通索引:普通索引是最基本的索引,它没有任何限制,允许在定义索引的列中插入重复值和空值
(2).唯一索引:索引的值必须唯一,允许有空值,如果是组合索引,列值得组合必须唯一
(3).主键索引:它是一种特殊的唯一索引,一张表只能有一个主键,不允许有空值,一般是在创建表的时候指定主键,主键默认就是主键索引
(4).组合索引:多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用
(5).全文索引:它更像是一个搜索引擎,用来查找文本中的关键字,而不是直接与索引中的值比较,全文索引需要配合matchagainst操作使用,而不是一般的where和like
(6).空间索引:空间索引是对空间数据类型的字段建立的索引,创建空间索引的列,必须被声明为notnull
从物理存储角度分为聚集索引和非聚集索引
聚集索引:一张表中只能包含一个聚集索引,但是这个索引可以包含多个列,聚集索引用来确定表中数据的物理顺序
从数据结构角度分为hash索引和B+Tree索引
(1).hash索引:hash索引顾名思义基于hash表实现,hash索引中存储的就是hash码,存储引擎会为hash索引中的每一列都计算一个hash码
(2).B+Tree索引:InnoDB和MyISAM存储引擎默认使用的是B+Tree索引,Mermory搜索引擎默认使用的hash索引