Mysql索引分类

251 阅读3分钟

Mysql索引分类

参考链接

索引分类

索引是关系数据库中对某一列或多列的值进行 预排序的数据结构。使用索引可以快速访问数据库表中的特定信息。

优点:可以加快数据的检索速度

缺点:索引需要占用物理空间。创建索引和维护索引要消耗时间,对表操作的时候,索引也需要动态维护,会降低操作的执行效率

从存储结构上划分:(engine的存储结构)

  • BTree索引,

Innodb的默认使用的 BTree作为存储数据结构,

B+树,叶子存储value,非叶子节点存储 key和指针,整体看起来,矮胖矮胖的。查询稳定,减少磁盘IO

  • Hash索引,

msyql存储引擎只有 memory存储引擎执行 hash索引,

Hash索引是通过 hash算法,将索引的信息存储在hash表中。

优点:

适合等值查询

缺点

不能进行范围查询,和模糊查询,只能根据key hash然后找出value

当出现 hash碰撞的时候,可能要遍历整张表的每天数据

  • FullText-index全文索引,

fulltext索引是将索引的列按照特定算法,对字段分割后的词或 词组,进行索引。

mysql5.6 及以后的版本,myisam 和 innodb的存储引擎均支持 全文索引

优点:

针对 like %xx% 这种操作效率更高

缺点

索引消耗极大

  • R-Tree索引

R-Tree,空间数据索引,RTree的目的就是要实现二维数据的查询

从应用的层次划分

  • 普通索引

一个索引只包一个单列,

  • 联合索引

一个索引有多字段组合而成

  • 唯一索引

unique key,唯一索引,在创建或者修改的时候,会追加唯一约束。

  • 主键索引

primary key, 它是一种特殊的唯一索引,不容许有空值,一个表只能有个主键。

从数据存储和索引键值的逻辑关系划分:

  • 聚簇索引(Innodb,数据行和相邻的键值紧凑的存储在一起)

叶子节点存储的是 主键索引和对应的数据行,即找到了索引就找到了数据,

数据查找

主键索引:叶子节点存放是 主键索引值和对应的行记录,找到索引就直接返回

二级索引(辅助索引,辅助查询的索引):叶子节点存放的 索引+主键值,根据主键值,再回表查询到对应的数据记录

  • 非聚簇索引(Myisam)

索引的存储和数据的存储是分开的,这就叫做 非聚簇索引

数据查找

主键索引和 二级索引,节点存储的都是 对应的 索引类型值,叶子节点存储的是【索引类型值+对应的数据记录的指针】,找到该叶子节点后,再根据 数据记录的指针去对应的【数据文件中查询】