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

时间:2009-07-15 12:19:39

标签: mysql database data-structures tree implementation

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

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

2 个答案:

答案 0 :(得分:6)

复合索引也使用B-Trees,它们只是连接索引列以确定密钥。作为一个副节点,Oracle也知道其他索引类型,即位图索引。但这并不取决于索引的列数。

答案 1 :(得分:3)

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树的方式存储您的数据。

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