远大农资 发表于 2023-4-15 00:50:41

MySQL学习笔记-索引

索引

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。


[*]无索引的查找:全表扫描(将整张表遍历一遍),性能极低。
[*]有索引的查找:数据库系统在存储数据的同时会维护一种数据结构(如二叉树),当需要查找时,利用该数据结构进行查找,性能较高。
[*]索引的优缺点

一. 索引结构

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构。


[*]索引在存储引擎中的支持情况


[*]平常所说的索引,如果没有特别指明,一般都是说B+树结构组织的索引。
1. B+树

1.1 二叉树



[*]一种经典的数据结构。
[*]二叉树的两个缺点:

[*]顺序存储二叉树时,会形成一条链表,二叉树的深度很大,效率很低。
[*]二叉树的度不大于2,在数据库中存有大量数据的时候深度很大,效率很低。

1.2 红黑树



[*]一种自平衡的特殊二叉树。
[*]可以解决二叉树可能形成链表的缺点,但是依旧存在数据量大时深度很大的问题。
1.3 B树(平衡多路查找树)



[*]一种自平衡的树。可以解决二叉树的两个缺点。
[*]一个节点可以拥有两个以上的子节点。
1.4 B+树



[*]B树的变种。
[*]B+树与B树的区别:

[*]所有的元素都会出现在叶子节点。
[*]叶子节点形成了一条单向链表。

1.5 MySQL中的B+树



[*]在MySQL中,对B+树进行了优化。在原有基础上,叶子节点改为了双向循环链表,提高区间访问的性能。
2. Hash

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

2.1 Hash索引的特点

<ol>只能用于对等比较(=,in),不支持范围查询(between,>, , = ,
页: [1]
查看完整版本: MySQL学习笔记-索引