WEB开发网
开发学院数据库MSSQL Server SQL Server和Oracle中的索引 阅读

SQL Server和Oracle中的索引

 2008-09-03 09:59:42 来源:WEB开发网   
核心提示: 图:典型的B*树索引布局 这个树底层的块称为叶子节点(leaf node) 或(leaf block),其中分别包含各个索引键以及一个rowid(它是指向所索引的行),叶子节点之上的内部块称为分支块(branch block),SQL Server和Oracle中的索引(5),这些节点用于

图:典型的B*树索引布局

这个树底层的块称为叶子节点(leaf node) 或(leaf block),其中分别包含各个索引键以及一个rowid(它是指向所索引的行)。叶子节点之上的内部块称为分支块(branch block),这些节点用于实现导航。例如,如果想在索引中找到值20,要从树顶开始,找到左分支,我们检查这个块,并发现需要找到范围"20..25"的块,这个块将是叶子块,其中会指示包含数20的行。索引的叶子节点实际上构成了一个双向链表。一旦发现要从叶子节点中的那里开始,执行值的有序扫描(index range scan)就会很容易,我们就不必再在索引结构中导航:而只需根据叶子节点向前或向后扫描就可以了。

B*树的特点之一是:所有叶子块都应该在树的同一层上,这一层称之为索引的高度, 它说明所有从索引的根块到叶子块的遍历都会访问同样数目的块。也就是说,对于形如"select INDEX_column FROM TABLE where INXDEX_column =:X"的索引,要达到叶子块来获取第一行,不论使用的:X值是什么,都会执行同样数目的I/O,由此可见B*树的B代表的是balanced,所谓的"Height balanced"。大多数B*树索引的高度都是2或3,即使索引中有数百万行记录也是如此,这说明,一般而言,在索引中找到一个键只需要2到3次I/O,这确实不错。

B*树是一个极佳的通用索引机制,无论是大表还是小表都很适用,随着底层表大小增长,获取数据的性能仅会稍有恶化。

比如,我们为customers表建立一个常见的B*树索引:

createINDEXIDX_Cus_Cityoncustomers(city)

B*树索引有以下子类型:

复合索引

复合索引也是一种B*树索引,它由多列组成。当我们拥有使用两列或超过两列的频繁查询时,就使用B*树复合索引,而其所使用的两列或多列在where子句中and逻辑操作符连接。

上一页  1 2 3 4 5 6 7  下一页

Tags:SQL Server Oracle

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接