MySQL数据库——索引

索引是数据结构,用于高效获取数据的数据结构(有序)

1、索引的优缺点:

1.1、优点:

a、提高数据检索效率,降低数据库的IO成本(提高查询效率

b、通过索引列对数据进行排序,降低了数据排序的成本,降低CPU的消耗(提高排序效率)

1.2、缺点:

a、索引列也是要占用空间

b、索引大大提高查询效率,但降低了更新的速度,比如INSERT、UPDATE、DELETE

2、索引结构

索引结构
索引结构 描述
B+Tree 最常见的索引类型,大部分引擎都支持B+树索引
Hash 底层数据结构使用哈希表实现,只有精确匹配索引列的查询才有效,不支持范围查询
R-Tree(空间索引) 空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-Text(全文索引) 是一种通过建立倒排索引,快速匹配 文档的方式

3、存储引擎支持索引方式

存储引擎支持索引方式
索引 InnoDB MyISAM Memory
B+Tree索引 支持 支持 支持
Hash索引 不支持 不支持 支持
R-Tree索引 不支持 支持 不支持
Full-text索引 MySQL5.6之后支持 支持 不支持

3.1、B-Tree

在数据库索引的时候可以采用二叉树,但是二叉树的缺点就是:顺序插入时,会形成一个链表,查询性能大大降低。在大数据量的情况下,层级较深,检索速度慢。

解决:根据二叉树的缺点我们可以想到使用红黑树来解决,但是红黑树也存在大量数据量情况下,层级较深,检索速度慢的问题

****为了解决二叉树和红黑树的缺陷,可以使用B-Tree结构。B-Tree(多路平均查找树)以一棵最大度数(Max-degree,指一个节点的子节点个数)为5(5阶)的B-Tree为例(每个节点最多存储4个Key,5个指针)。当插入数据大于最多存储数量的时候,中间数字向上分裂

MySQL数据库——索引_第1张图片

图片来源:https://blog.csdn.net/yin767833376/article/details/81511377 他讲的也很好。

3.2、B+Tree

B-Tree与B+Tree的区别:

a、B+Tree所有的数据都会出现在叶子节点(叶子节点存放数据)

b、叶子节点形成一个单向链表,每一个节点通过指针指向下一个节点,形成单向链表

MySQL数据库——索引_第2张图片

 图片来源:https://blog.csdn.net/yin767833376/article/details/81511377 

MySQL索引数据结构对B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能

3.3、Hash

哈希索引采用一定的哈希算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),可以通过链表来解决

hash索引的特点

a、hash索引只能用于对等比较(=、in)不支持范围查询(between、>、<、...)

b、无法利用索引完成排序操作

c、查询效率高,通常只需要一次检索就可以了,效率高于B+Tree索引

hash索引存储引擎:

a、Memory

b、InnoDB:具体自适应hash功能,hash索引是存储引擎根据B+Tree索引在知道那个条件下自动创建的

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