MySQL高级第二篇:索引的分类及MyISAM与InnoDB中的索引对比
创始人
2024-06-03 01:44:21
0

MySQL高级第二篇:索引的分类及MyISAM与InnoDB中的索引对比

    • 一、索引的分类
      • 1. 聚簇索引
      • 2. 非聚簇索引(二级索引,辅助索引)
      • 3. 联合索引(也属于非聚簇索引)
    • 二、InnoDB的 B+ 树索引注意
      • 1. 根页面位置始终不变
      • 2.内节点中目录项记录的唯一性
      • 3. 一个页面最少存储两条记录
    • 三、MyISAM与InnoDB中的索引对比
    • 四、思考?

一、索引的分类

1. 聚簇索引

  • 针对主键构建的索引,聚簇即数据行和相邻的键值存储在一起。

  • 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式,即所有的用户记录都存储在了叶子结点,索引即数据,数据即索引

  • 特点:

    • 叶子节点存储一条条完整记录,记录之间单向链表相连
    • 页内记录按主键大小顺序排序,页之间双向链表连接,页之间也升序排列
    • 这种索引无序我们手动创建,InnoDB会自动创建
  • 优点:

    • 数据访问更快,因为直接保存了完整记录,直接就查到了,无需回表操作
    • 对主键的 排序查找和范围查找更快
  • 缺点:

    • 插入速度严重依赖插入顺序
    • 更新主键代价比较高
    • 二级索引访问需要两次索引查找
  • 限制:

    • MySQL数据库只有InnoDB支持聚簇索引
    • 每个MySQL表只能有一个聚簇索引,一般就是主键
    • 如果没有定义主键,InnoDB会选择非空的唯一索引代替,如果页没有,就会隐式的定义一个主键作为聚簇索引

2. 非聚簇索引(二级索引,辅助索引)

  • 针对非主键构建的索引,可以有多个非聚簇索引
  • 非聚簇索引不保存完整记录,且按照索引列排序
  • 非聚簇索引只能确定主键,查找完整数据时,需要回表,再到聚簇索引中查找一遍

3. 联合索引(也属于非聚簇索引)

  • 同时为多个列建立索引,以多个列大小作为排序规则
  • 本质上也是一个二级索引

二、InnoDB的 B+ 树索引注意

1. 根页面位置始终不变

  • 每当为某个表创建索引时,最开始还没有数据的时候,就会为它创建一个根结点页面。
  • 然后慢慢往表中插入记录,这时先保存在这个根结点页中
  • 当根结点满了后,会将根节点所有记录复制一份,然后页分裂,移动数据等,这时根结点页便升级为目录页了
  • 整个过程最开始的根页面始终不会移动改变

2.内节点中目录项记录的唯一性

  • 对于二级索引来说,当为某列建立索引时,假如多条记录的这一列都是相同的,我们再来添加一条记录,和已有的那些记录也相同,这时,我们就找不到要插入到哪一页了。
  • 所以,我们要保证目录项记录的唯一性,如果这一列有重复,可以冗余保存上主键,这样就不会重复了

3. 一个页面最少存储两条记录

这个很简单,每个页只存储一条的话,完全没有什么效果,连树的结构都不能形成。

三、MyISAM与InnoDB中的索引对比

  • MyISAM索引文件和数据文件分离,索引仅保存数据地址
  • MyISAM的索引都是非聚簇的,每次都要进行一次回表
  • 它的回表是根据地址直接去拿,比较快速
  • InnoDB表必须有主键,MyISAM无所谓

四、思考?

  • 索引这么方便,我们是不是上来就要建索引呢?
  • 其实并不是,索引虽然好,但不合理的使用索引只有坏处没有好处
  • 一个表上的索引越多,占用的存储空间就会越大,在增删改记录的时候需要维护索引,性能就会变差
  • 所以,学习如何合理的使用索引就显得尤为重要

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...