指数建议

指数建议

作为一个理论数据库问题,如果有人问你“你会建议哪些索引以及为什么?”答案是来自primaryclusteringsecondary索引吗?我们如何知道是否应该引入其中一个而不是B-Tree

这应该是从一个简单的索引角度出发,因为我问的是与索引相关的课程材料,其中我已经涵盖了一些介绍性材料。

答案1

primary和指标与和指标secondary正交,并且这两个都与和指标正交。b-treehashclusterednon-clustered

  • 第一类索引是逻辑索引。它们是有关数据结构的高级指标。主键应唯一地标识您的数据,这意味着它应该是关系数据库理论所称的“候选键”之一。次级索引用于加快对主索引以外的其他字段的查询,它们不必是候选键。

  • 第二类是特定的索引实现,适用于略有不同的查询。b-tree可以满足范围查询(WHERE c > 3 AND c < 7),但hash不能。hash然而,在精确查询()的平均情况下为 O(1)(常数时间)WHERE c = 5,而b-tree始终为 O(lg n)(对数时间)。b-treehash都是定义明确的数据结构,但它们与您的实际数据关系不大。

  • 第三类定义整个表是否排序在磁盘上按索引的排序顺序。如果是这样,它就称为索引clustered

如您所见,索引可以是这三个不同类别中的一个primary clustered b-treeprimary clustered hash另一个或其他组合。


如果有人问你要引入哪些索引,答案首先会来自第一类。问题可能与模式有关。这至少是你的起点。只有当你决定要引入哪些索引时,你才需要考虑它们应该是 B 树、聚类等等。第一类是逻辑类,与你使用数据的方式紧密相关。其他的是实现细节。

相关内容