初识数据库索引结构

建立索引的优点在于:能够提高某列数据的检索效率,不需要进行顺序扫描。同时,缺点在于:索引结构需要单独维护,占据磁盘/内存空间,而且降低了增删改的效率。

索引结构可以使用什么数据结构来实现?

  1. 二叉树。有序,但是存在缺点:顺序插入时会退化成单向链表,查询性能大大降低,数据量大时,树会很深,检索速度变慢。

  2. 红黑树。一种自平衡的二叉树,因此解决退化成链表的问题,但是其二叉树的本质仍然存在,数据量很大时树的深度仍然很大。

由此引出B树这种数据结构。

上图是一个最大度数为5的B树,每个节点最多存储4个key和5个指针。5个指针分别指向5个子节点。不管是非叶子节点还是叶子节点,key值都对应存储其数据entry。B树的插入和分裂过程需要重点理解。

B+树是B树的变种。

上图以一个最大度数为4的B+树为例。与B树不同的是,B+树中,所有元素都会出现在叶子节点中,叶子节点用于存放数据,而非叶子节点只是起到索引的作用。此外,B+树中,所有的叶子节点形成一个单向链表。

MySQL中,对普通的B+树结构进行改进。对叶子节点增加了一个指针变成双向链表,能够提高区间查询的性能。每个节点(非叶子节点和叶子节点)都存储在一个页中。

另一个常用的索引结构是hash索引结构。这种索引利用hash算法,特点在于:只能用于相等/不等比较,不能进行范围查询;无法利用索引进行排序操作;查询效率通常比B+树索引高,因为只需要进行hash值进行一次查询。

posted @ 2024-07-30 09:43  随机生成一个id  阅读(1)  评论(0编辑  收藏  举报