【MySQL--->索引】

文章目录

    • @[TOC](文章目录)
  • 一、索引概念
  • 二、B树与B+树
    • 1.B树的特点:
    • 2.B+树的特点:
    • 3.为什么使用B+树而不使用B树
  • 三、聚簇索引和非聚簇索引
  • 四、索引操作
    • 1.创建索引
    • 2. 删除索引
    • 3.全文索引

一、索引概念

mysql的查询的过程是从文件中提取到内存中查询,MySQL启动时会在内存中维护一个buffer pool缓冲区,操作数据之前要从磁盘将数据加载到缓冲区,为了减小IO次数MySQL与磁盘的IO单位page是16KB.将这些page组织成一个查询高效的数据结构,这个数据结构就是索引
MySQL索引结构是B+树,索引按照存储引擎分为innodb的聚簇索引和非聚簇索引.按照搜索关键字分为主键索引和普通索引.

二、B树与B+树

1.B树的特点:

B树也叫平衡多路查找树,M阶B树叫做M叉树
1.节点中可以存储多个值(索引),并且从小到大排列.
2.节点即存储键值又存储数据
3.根节点的节点数有[2,M]个子节点
4.除根节点以外的非叶子节点个数为值的个数-1,最大超过M-1.
5.叶子节点都位于同一层.

2.B+树的特点:

B+树是在B树的基础上衍生出来的.
1.根节点可能是叶子节点,也可能是子节点[2,M]的树
2,索引节点有K个值,就有K+1个分支几点.
3.所有叶子节点用指针链接,并从小到大排列.
4.非叶子节点只存储key值,不存储数据,只有叶子节点存储数据.
5.有两个头结点,一个根节点,一个最小的叶子节点.

3.为什么使用B+树而不使用B树

1.表是存储在磁盘中的,要操作表中的数据需要从磁盘提取数据到内存.B+树只有叶子节点存储数据,其他节点只存储key值,所以树的高度相对较低,搜索路径较短,IO次数少.而B树的内部节点存储的是键值对,树的高度相对较高,IO次数多.io开销大,因为磁盘到内存的传输速度慢,数据定位会有寻道时间和旋转延迟.
2.B+树的所有叶子节是一个链表,并且有序,范围查询遍历链表即可,而B树每查询一个都需要从根节点重新遍历查询,范围查询效率低.

三、聚簇索引和非聚簇索引

innodb存储引擎和myisam存储引擎使用的都是B+树索引结构,但是innodb是将数据存储在叶子节点,而myisam是将索引结构和数据分开存储的,索引叶子节点存储的是数据记录的地址。 像innodb这样的索引结构称为将聚簇索引,myisam这样的称为非聚簇索引

除了主键索引,允许添加其他非主键索引,聚簇索引的非主键索引的叶子结点是存储的主键,利用非主键索引找到主键,再利用主键找到整条数据,非聚簇索引的非主键索引则跟主键索引相同,叶子结点都是存储的数据记录的地址.

四、索引操作

1.创建索引

创建主键索引
【MySQL--->索引】_第1张图片
【MySQL--->索引】_第2张图片
【MySQL--->索引】_第3张图片
创建唯一键索引
【MySQL--->索引】_第4张图片
【MySQL--->索引】_第5张图片
【MySQL--->索引】_第6张图片
创建其他普通索引
【MySQL--->索引】_第7张图片
【MySQL--->索引】_第8张图片
创建复合主键索引
复合主键索引是多列组合成的主键,查询时,用复合建最左边列的值查找复合建右边的值,从主键的左往后右一次匹配能匹配上,就能直接返回,这加索引覆盖.

2. 删除索引

删除主键索引
在这里插入图片描述
删除唯一键索引
在这里插入图片描述
删除普通索引
【MySQL--->索引】_第9张图片

3.全文索引

创建全文索引
【MySQL--->索引】_第10张图片
【MySQL--->索引】_第11张图片
普通查询
【MySQL--->索引】_第12张图片
全文索引查询
【MySQL--->索引】_第13张图片


你可能感兴趣的:(mysql,数据库)