Mysql索引的用途与工作原理

Mysql索引

  • Mysql索引的介绍
  • Mysql索引语法
  • 索引的类型
  • 索引的分类

Mysql索引的介绍

  索引(index)是帮助Mysql高效获取数据的有序数据结构。
  在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样,就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

索引的优缺点:

  • 优点
      ① 极大提升数据查找效率,降低数据库的IO成本;
      ② 通过索引对数据进行排序,降低数据排序成本,降低CPU消耗。
  • 缺点
      ① 需要额外的空间用于存储索引;
      ② 会降低表的更新效率:因为索引需要不断维护,保证索引有效,消耗一定的时间成本。

Mysql索引语法

  • 创建索引
CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_col_name,....);
  • 查看索引
SHOW INEX FROM table_name;
  • 删除索引
DROP INDEX index_name ON table_name; 

索引的类型

  索引是在数据库的存储引擎层实现的,所以不同的引擎,索引的实现并非一样,主要包含以下几种:

  1. B+Tree索引,最常见的索引类型,大部分引擎都支持B+Tree索引;
  2. Hash索引,使用哈希表实现,只有精确匹配索引列的查询才有效,不支持范围查询;
  3. R-Tree(空间索引),是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常较少使用;
  4. Full-text(全文索引),是一种通过建立倒排序索引,快速匹配文档的方式,类似于Lucene,Solr,Es。
    Mysql索引的用途与工作原理_第1张图片
  • B树结构示意图
    Mysql索引的用途与工作原理_第2张图片

  • B+树结构示意图
    Mysql索引的用途与工作原理_第3张图片

  • Mysql索引结构示意图
      Mysql索引数据对传统B+Tree进行了优化,增加了一个指向相邻叶子结点的链表指针,形成了带有序指针的B+Tree,提高区间访问性能
    Mysql索引的用途与工作原理_第4张图片

  • hash索引
      hash索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。
      如果两个(或多个)键值,映射到同一个槽位上,它们就产生了hash冲突(也称hash碰撞),可以通过链表来解决。
      hash索引存储引擎支持:Mysql中支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能,hash索引是存储引擎根据B+Tree索引在指定条件下自动构建的。

  • hash索引的特点
      ①hash索引智能用于对等比较(=,in),不支持范围查询(between,>,<,…);
      ②无法利用索引完成排序操作;
      ③查询效率高,通常只需要一次检索即可,效率通常高于B+Tree索引。

思考: 为什么InnoDB引擎选择使用B+Tree索引结构?
  ① B+Tree查找效率高,时间复杂度为Ologn
  ② 在Mysql中,一个结点存一个页,页的最大储存16K数据,而B+Tree的根节点只存索引数据,相对于BTree,B+Tree在一页中可以存放更多的数据,树的层级将会更少。这样一来则可以极大地利用磁盘IO缓存,减少磁盘IO次数,加快数据查找效率;
  ③ B+Tree支持范围查询。

索引的分类

Mysql索引的用途与工作原理_第5张图片

  • InnoDB引擎,根据索引的存储形式可分为两类:
    Mysql索引的用途与工作原理_第6张图片
  • 聚集索引和二级索引执行SQL语句视图
    Mysql索引的用途与工作原理_第7张图片
  • 二级索引的工作原理:
      ①通过二级索引找到对应主键值;
      ②通过主键值搜索聚集索引拿到具体的行数据。
    Mysql索引的用途与工作原理_第8张图片

图片来源于互联网,笔记仅供学习使用,如若文中描述错误,敬请指导。

你可能感兴趣的:(Mysql数据库,mysql,数据库,服务器,后端,java)