日期:2014-05-16  浏览次数:20405 次

Oracle Database 中 B*Tree 索引内部维护

最近一周在复习索引相关的东西,除了回顾concept,还在MOS上看到了一篇比较好的文档。分享给大家。

文档编号:[ID 30405.1]


This article is only concerned with B*tree indexes which are currently the most commonly used.  The theory of B*tree indexes is beyond the scope of this article; for more  information refer to computer science texts dealing with data structures.

这篇文档只描述关于当前最常用的b*tree索引。b*tree索引的原理已经超过了本文档的范围。更多的信息可以去查看计算机的数据结构原理。

Format of Index Blocks
~~~~~~~~~~~~~~~~~~~~~~

索引的结构(格式?)


Within a B*tree index, index blocks are either branch blocks, the upper blocks  within the B*tree index, or leaf blocks, the lowest level index blocks. Branch blocks contain  index data that point to lower level index blocks. Leaf blocks contain every indexed data value and a corresponding ROWID used to locate the actual row.


在b*tree索引中,一共有两种索引块,一种是branch block(分支块),还有leaf block(叶块),一种是高level,一种低level的(低level,在索引底部)。branch block包含定位低等级的索引块(可能是branch block或者leaf block)的pointer leaf block包含每一个索引数据值和相应的rowid(用来定位真正的row)。

以下是一个索引块的分布情况:


               Index Block Format


|-----------------------------------------------------|
|                                                     |
|            Index Block Header             |
|                                                     |
------------------------------------------------------|
|                                                     |
|  Space reserved for future updates   |
|  and inserts of new rows with the     |
|   appropriate key values                  |
|                                                     |
|-----------------------------------------------------| <- PCTFREE say 10
|                                                     |
|             Index Key Data                  |
|                                                     |
|                                                     |
|                                                     |
|                                                     |
|