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)
索引的存储和数据的存储是分开的,这就叫做 非聚簇索引
数据查找
主键索引和 二级索引,节点存储的都是 对应的 索引类型值,叶子节点存储的是【索引类型值+对应的数据记录的指针】,找到该叶子节点后,再根据 数据记录的指针去对应的【数据文件中查询】