聚集索引,非聚集索引和覆盖索引是数据库索引的三种主要类型。聚集索引对表的物理排序进行管理,使数据按照某种特定的顺序存储,优化数据的读取速度。非聚集索引则是独立于数据文件的,使用索引项指向存储的数据,提供多个查询入口。覆盖索引是一种特殊的非聚集索引,其索引项包含了查询中需要的所有字段,能显著提升查询效率。
什么是聚集索引
聚集索引是数据库表的主键索引,以一种特定的顺序存储数据的逻辑视图。在一个表中,只能有一个聚集索引。聚集索引的特点在于,它将数据存储与索引绑定在一起,即索引的顺序就是数据的物理存储顺序。例如,在一个按主键升序排列的表中,主键值是聚集索引。
什么是非聚集索引
非聚集索引与聚集索引的存储方式完全不同,它与表数据分开存储,非聚集索引本身按照索引值排序,并包含一个指针,指向每个索引值对应的数据行。一个表可以有多个非聚集索引,它们通常用于提供除主键以外的查询入口。
什么是覆盖索引
覆盖索引是非聚集索引的一种特例,它包含了查询中的所有字段。查询过程中,数据库引擎可以只使用覆盖索引来完成查询,无需访问表数据,因此能大大提高查询效率。覆盖索引通常用于经常执行的查询,它覆盖了查询中的所有字段,从而避免了磁盘I/O操作。
总结
聚集索引、非聚集索引和覆盖索引都有各自的优点和用途,理解它们的区别和适用场景对于优化数据库性能非常重要。聚集索引用于定义数据的物理存储顺序,优化了读取速度;非聚集索引提供了额外的数据查询入口,可提高多条件查询的速度;覆盖索引则是通过包含所有查询字段来进一步优化查询性能。
延伸阅读
什么是B树
B-树是一种多路搜索树(并不一定是二叉的)
1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。
一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:
1、根结点至少有两个子女;
2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ – 1 <= j <= m – 1;
3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
4、所有的叶子结点都位于同一层。
特点:
是一种多路搜索树(并不是二叉的):
1.定义任意非叶子结点非常多只有M个儿子;且M>2;
2.根结点的儿子数为[2, M];
3.除根结点以外的非叶子结点的儿子数为[M/2, M];
4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)
5.非叶子结点的关键字个数=指向儿子的指针个数-1;
6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的
子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
8.所有叶子结点位于同一层;