介绍:
数据库索引是一种特殊的数据结构,用于提高数据库系统的查询效率和性能。它是对数据库表中一列或多列的某些值进行排序的一种结构,可以快速定位并访问数据。
类比于书中的目录,每个章节都有一个对应的页码,通过查找目录可以快速定位到所需要的内容。数据库索引也是如此,它将数据按照一定规则分类,并记录数据在分类中的位置。当进行查询时,数据库会使用索引来快速定位到符合搜索条件的数据位置,避免了全表扫描,加快了查询速度。
缺点:
数据库索引虽然可以提高查询效率,但是也会占用一定的存储空间,并且会影响插入、更新、删除等操作的性能,同时也需要考虑索引的维护成本;---修改操作需要维护索引
常见的索引:
Hash索引和B+树索引区别
-
数据存储方式
Hash索引将每个索引键值与一个地址映射起来,也就是散列值,然后通过散列函数将散列值转换为一个物理地址,存储于哈希表中。而B+Tree索引则是基于树状结构实现,将每个索引键值按顺序插入到一棵平衡树中,通过遍历树状结构来查找数据。
-
适用场景
Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,< ,...)不支持模糊查询,无法利用索引完成排序操作。B+tree支持范围匹配及排序操作,可以使用前缀匹配完成模糊查询;
-
索引维护和存储空间
Hash索引对索引数据的增加、删除和更新操作更加高效,因为它只需要重新计算散列值即可。但是,由于其数据存储方式是随机的,所以它需要更大的内存空间来避免散列冲突。B+Tree索引则需要进行更多的数据页分裂、合并等操作,因此其维护成本更高,但是在对存储空间的利用率方面更加优秀,因为相邻的节点存储于同一个数据页中。
-
大部分存储引擎都支持B+Tree索引,只有Memory支持Hash索引
B+数索引数据结构图:
MySQL的B+树索引结构与普通B+树结构稍微有点区别,叶子节点增加了 双向指针,方便范围查找等功能。