mysql 索引
按存储方式区分:
一:b树,通常是使用b树这种方式,只有一个根节点,叶子节点之间彼此相连
二:hash,首先不能使用hash 索引排序,并且它只支持等值索引,比如 "=" "in()" "<=>"。
不支持键的部分匹配,因为计算hash 值的时候是根据整体索引值来计算的。
建立hash索引相比b树需要更长的时间。
按逻辑区分:
一:普通索引(NORMAL)
这个是最常用也是默认的索引类型,没有任何限制,就是加快系统的访问速度,
并且允许索引的列存在重复的值或者null 值。
二:主键索引(PRIMARY KEY)
专门为主键字段创建的索引,属于索引的一种,是唯一索引的特殊形式,索引列不允许有重复的值,也不允许有null 值。
三:唯一索引(UNIQUE)
跟普通索引类似,不同的是创建唯一索引的目的不是为了提高访问速度,而是保证索引列的唯一性,允许有空值。
如果是组合唯一索引,则组合必须是唯一的。
四:空间索引(SPATIAL)
存储引擎必须是myisam的表中创建,列类型必须是GEOMETRY且非空。
五:全文索引(FULLTEXT)
该索引主要用来查询文本中的关键字,只能在char,varchar或text 的列上创建,并且存储引擎必须是myisam 才支持此种索引类型。
允许索引列存在重复值或空值。对于大表而言,创建该索引非常消耗时间。
实际使用区分:
一:单列索引
顾名思义,索引中只包含表中的一列,可以使用普通索引,唯一索引,主键索引,全文索引
二:多列索引
又称为多列索引,复合索引。将表的多列组成一个索引,可以通过多个字段进行查询。但是只有查询条件中使用了这些字段中的第一个
字段时,索引才会被使用。比如 a,b,c 三列组合索引,查询条件中必须有a列。实际加速的查询条件组合情况有(a)(a,b)(a,b,c)。
注意没有(a,c)