7

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

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

4

2 回答 2

7

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

于 2009-07-15T12:23:02.513 回答
4

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

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

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

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

SQL Server 现在也对内存优化表使用了不同的机制,这对于 OLTP 类型的查询非常有用。

于 2009-07-15T12:23:02.217 回答