|
索引
索引(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,>, , = , |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|