Database 数据库索引

Database 数据库索引,database,indexing,clustered-index,Database,Indexing,Clustered Index,我需要开发一个数据库索引的“朴素”实现,以便在分布式环境中使用。我对这个问题几乎一无所知,而且时间给我带来了一点压力 我很想听到一些关于这个主题的观点、例子和算法。 我希望能够对我需要实现的东西有一个心理表征 编辑:我指的是聚集索引基本上有两种主要类型的索引: 群集(即数据是物理组织的,如果需要,您可以在每次插入时对其重新排序) 典型用例:物理组织通常与插入顺序相同,因此重新排序开销不是问题。例如,顺序UID(数据库上下文中的所谓“标识”字段)就是这种情况 集群索引的一个明显缺点是,数据上只能

我需要开发一个数据库索引的“朴素”实现,以便在分布式环境中使用。我对这个问题几乎一无所知,而且时间给我带来了一点压力

我很想听到一些关于这个主题的观点、例子和算法。 我希望能够对我需要实现的东西有一个心理表征


编辑:我指的是聚集索引

基本上有两种主要类型的索引:

  • 群集(即数据是物理组织的,如果需要,您可以在每次插入时对其重新排序)

    典型用例:物理组织通常与插入顺序相同,因此重新排序开销不是问题。例如,顺序UID(数据库上下文中的所谓“标识”字段)就是这种情况

    集群索引的一个明显缺点是,数据上只能有一个这样的索引

    如果插入顺序与排序顺序完全相同,则实现简单:使用列表

  • 插入是O(1):您只需附加列表的新数据
  • 如果ID是连续的(即数组索引与UID完全匹配),则访问权限为O(1),否则为O(日志)
  • 未聚集(即在数据上保留指针,如在哈希表中)

    典型用例:集群是不合适的,因为它会导致很大的插入开销

根据您的需要,您可能最终会使用这两种数据结构


索引相关信息的广泛存储库可用

这是一种非常快速、易于实现、非常简单的索引实现,最适合任何具有本机格式的语言,是一个散列,其键是要索引的列的现有值,其值是具有该值的行的行ID数组。

在SQL Server中-是。其他数据库系统可能有其他类型的索引。这个问题不是很清楚……你能不能把聚集索引扩展一点,这就是我想要的after@Brann-好吧,我想我知道了。我想我必须为非顺序数据创建某种算法。大多数DBMS不会在插入时使用。他们会做的是有一个增长因子,一旦数据溢出到这个范围之外,数据就会变得杂乱无章。因此,您可以使用维护计划按照适当的计划重新构建索引,以对聚集索引进行重新排序。否则,单行插入可能会触发TB数据的移动。@Spence:确实如此。我把注意力集中在OP问题上(即“天真的实现”)