如何在 RDB 中实现常规索引和复合索引?

Posted

技术标签:

【中文标题】如何在 RDB 中实现常规索引和复合索引?【英文标题】:How are regular and composite indexes implemented in RDBs? 【发布时间】:2010-11-10 23:46:54 【问题描述】:

mysql 或 Oracle 等数据库中,索引是如何实现的?我认为常规索引存储为 B 树,但找不到任何关于在多个列上建立索引的复合索引。我正在寻找使用的数据结构的名称,以便研究它们。

更一般地说,我在哪里可以找到有关数据库实现细节的更多此类信息?我将在大学的晚些时候参加这门课程,但我现在很好奇。

【问题讨论】:

【参考方案1】:

复合索引也使用 B 树,它们只是连接索引列以确定键。作为侧节点,Oracle 还知道其他索引类型,即位图索引。但这并不取决于索引的列数。

【讨论】:

【参考方案2】:

B 树。每个索引都存储为 B 树——甚至是复合树。

如果您希望对索引的组织方式进行更多研究,请查看 B+ 树和 B* 树。对于 SQL Server,Kalen Delaney's Inside SQL Server: The Storage Engine 是一本关于 SQL Server 基本要素的优秀书籍,包括它的索引组织。所以你一定要检查一下。

一位评论者指出,Oracle 可以使用位图索引,其结构与 B 树非常不同,但这些索引很少用于传统的关系数据库——它们更常用于 OLAP 类型的应用程序,并且在您需要需要快速访问一组非选择性数据。

编辑:例如,SQL Server 现在使用Columnstore Indexes。如果您对大型 BI 类型的工作负载进行任何工作,那么绝对值得看看这些,因为它们以与 B-Tree 完全不同的方式存储您的数据。

SQL Server 现在也对memory optimized tables 使用不同的机制,这对于 OLTP 类型的查询非常有用。

【讨论】:

除了那些不像 Oracle 中的位图索引。 我真的不明白为什么这个答案被否决了。提供的参考书非常有帮助,它通常与接受的答案相同。

以上是关于如何在 RDB 中实现常规索引和复合索引?的主要内容,如果未能解决你的问题,请参考以下文章

复合非聚集索引和覆盖索引有啥区别

复合非聚簇索引和覆盖索引之间有什么区别

关于MySQL复合索引的使用方法有哪些?

如何定义复合和哈希 mongodb 索引?

SQL复合索引使用和注意事项

SQL SERVER大话存储结构_复合索引与包含索引