这里写目录标题

  • 1 概述
  • 2 优劣势
  • 3 索引结构
  • 3.1 B树(BTREE)结构
  • 3.2 B+树
  • 4 索引的分类
  • 5 索引语法
  • 5.1 创建索引
  • 5.2 查看索引
  • 5.3 删除索引
  • 6 索引的设计原则


1 概述

帮助MySQL高效查询的数据结构。

2 优劣势

优势

  • 类似于目录,可以快速提高查询效率;
  • 通过索引列对数据进行排序,境地数据排序成本;

劣势

  • 索引会额外占空间;
  • 降低了更新表(增删改)的开销,因为不仅要保存数据项,还要更改索引信息;

3 索引结构

不同的存储引擎对于mysql的索引结构是不一样的。
主流有四种索引:BTREEHASHR-treeFull-text
InnoDB引擎默认支持的就是BTREE索引;

3.1 B树(BTREE)结构

B树,多路平衡搜索树,一棵m叉的B树的特点:

  • 树中每个节点最多包含m个孩子节点;
  • 除了根节点和叶子节点外,每个节点至少有ceil(m/2)个孩子节点;
  • 如果根节点不熟叶子节点,至少有两个孩子节点;
  • 所有叶子节点都在同一层,
  • 每个非叶子节点由n个key和n+1个指针组成,其中 mysql多个索引如何调整顺序 mysql每个索引节点的大小_mysql多个索引如何调整顺序

mysql多个索引如何调整顺序 mysql每个索引节点的大小_数据库_02


理解:重点理解的是B树节点的组成,n-1个key和n个指针,n小于等于叉数m叶子节点同层;和红黑树一样,需要维护一颗满足所有B树条件的m叉树,分裂是向上分裂

3.2 B+树

mysql多个索引如何调整顺序 mysql每个索引节点的大小_mysql多个索引如何调整顺序_03

  • B+树非叶子节点最多包含n个key(而B树是n-1个key);
  • B+树的叶子节点保存了所有key的信息;
  • 注意B+树的查找,一定要走到最后的叶子节点,节点分离依据是左闭右开,以小的路为准;

mysql数据库的B+树(叶子节点顺序指针链接,目的是提高区间查找的效率,比如index between 5 and 28):

mysql多个索引如何调整顺序 mysql每个索引节点的大小_mysql多个索引如何调整顺序_04


新建索引会额外添加磁盘块,里面存放的是索引值;

4 索引的分类

  • 单值索引:一个索引只包含单列,一个表可以有多个单列索引;
  • 唯一索引:索引列的值必须唯一,允许有空值;
  • 复合索引:即一个索引包含多个列;

5 索引语法

5.1 创建索引

create [UNIQUE|FULLTEXT|SPATIAL] index indexname 
on Tablename(col_name)

在MySQL中,如果一个列是主键,默认会有主键索引,

5.2 查看索引

show index from table_name;

5.3 删除索引

drop index indexname on tablename;

6 索引的设计原则

  • 对于查询频次高数据量比较大的表建立索引;
  • 经常出现在 where 子句条件的中的列,应该建立索引;
  • 尽量使用唯一索引,区分度越高,使用索引效率越高;
  • 尽量使用短字段的索引;