这里写目录标题
- 1 概述
- 2 优劣势
- 3 索引结构
- 3.1 B树(BTREE)结构
- 3.2 B+树
- 4 索引的分类
- 5 索引语法
- 5.1 创建索引
- 5.2 查看索引
- 5.3 删除索引
- 6 索引的设计原则
1 概述
帮助MySQL高效查询的数据结构。
2 优劣势
优势
- 类似于目录,可以快速提高查询效率;
- 通过索引列对数据进行排序,境地数据排序成本;
劣势
- 索引会额外占空间;
- 降低了更新表(增删改)的开销,因为不仅要保存数据项,还要更改索引信息;
3 索引结构
不同的存储引擎对于mysql的索引结构是不一样的。
主流有四种索引:BTREE、HASH、R-tree、Full-text;
InnoDB引擎默认支持的就是BTREE索引;
3.1 B树(BTREE)结构
B树,多路平衡搜索树,一棵m叉的B树的特点:
- 树中每个节点最多包含m个孩子节点;
- 除了根节点和叶子节点外,每个节点至少有ceil(m/2)个孩子节点;
- 如果根节点不熟叶子节点,至少有两个孩子节点;
- 所有叶子节点都在同一层,
- 每个非叶子节点由n个key和n+1个指针组成,其中 ;
理解:重点理解的是B树节点的组成,n-1个key和n个指针,n小于等于叉数m ,叶子节点同层;和红黑树一样,需要维护一颗满足所有B树条件的m叉树,分裂是向上分裂;
3.2 B+树
- B+树非叶子节点最多包含n个key(而B树是n-1个key);
- B+树的叶子节点保存了所有key的信息;
- 注意B+树的查找,一定要走到最后的叶子节点,节点分离依据是左闭右开,以小的路为准;
mysql数据库的B+树(叶子节点顺序指针链接,目的是提高区间查找的效率,比如index between 5 and 28
):
新建索引会额外添加磁盘块,里面存放的是索引值;
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
子句条件的中的列,应该建立索引; - 尽量使用唯一索引,区分度越高,使用索引效率越高;
- 尽量使用短字段的索引;