学习《Oracle 9i10g编程艺术》的笔记 (十三) 索引
1.概述
索引是应用设计和开发的一个重要方面。如果有太多的索引,DML 的性能就会受到影响。如果索引太
少,又会影响查询(包括插入、更新和删除)的性能。要找到一个合适的平衡点,这对于应用的性能至关
重要。
我常常发现,人们在应用开发中总是事后才想起索引。我坚持认为这是一种错误的做法。如果你知
道数据将如何使用,从一开始就应该能提出应用中要使用怎样的索引,即具有一组代表性的索引。不过,
一般的做法却往往是随应用“放任自流“,过后才发现哪里需要索引,这种情况实在太多了。这说明,你
没有花时间来了解数据将如何使用以及最终要处理多少行。经过一段时间后,随着数据量的增长,你会不
停地向系统增加索引(也就是说,你所执行的是一种反应式调优)。你就有一些冗余而且从不使用的索引,
这不仅会浪费空间,还会浪费计算资源。磨刀不误砍柴工,如果刚开始的时候花几个小时好好地考虑何时
为数据加索引,以及如何加索引,这肯定能在以后的”调优“中节省更多的时间(注意,我所说的是”肯
定能“节省更多时间,而不只是”可能“节省更多时间)。
2.B*树索引
B*树索引就是我所说的“传统“索引,这是数据库中最常用的一类索引结构。其实现与二叉查找树很
相似。其目标是尽可能减少Oracle 查找数据所花费的时间。不严格地说,如果在一个数字列上有一个索引,
那么从概念上讲这个结构可能如图11.-1 所示。
例如,如果想在索引中找到值42,要从树顶开始,找到左分支。我们要检查这个块,并
发现需要找到范围在“42..50“的块。这个块将是叶子块,其中会指示包含数42 的行。有意思的是,索引
的叶子节点实际上构成了一个双向链表。一旦发现要从叶子节点中的哪里”开始“(也就是说,一旦发现第
一个值),执行值的有序扫描(也称为索引区间扫描(index range scan))就会很容易。我们不用再在索
引结构中导航;而只需根据需要通过叶子节点向前或向后扫描就可以了。所以要满足诸如以下的谓词条件
将相当简单:
where x between 20 and 30
Oracle 发现第一个最小键值大于或等于20 的索引叶子块,然后水平地遍历叶子节点链表,直到最后
命中一个大于30 的值。
B*树索引中不存在非惟一(nonunique)条目。在一个非惟一索引中,Oracle 会把rowid 作为一个额
外的列(有一个长度字节)追加到键上,使得键惟一。例如,如果有一个CREATE INDEX
相关文档:
按资料说V$BH查看表来显示数据库里每个对象类型的数据缓冲区里数据块的数量.
然后查询V$bh
select
owner, object_name
from
dba_objects o,
v$bh &nbs ......
商业开源数据库厂家EnterpriseDB与6月17日发布了最新的Postgres Plus高级服务器版,其目标是提高与Oracle数据库的兼容性,EnterpriseDB是开源数据库PostgreSQL(也叫做Postgres)背后的主要商业支持公司。
其实Postgres Plus高级服务器版并非完全开源,它是在开源的PostgreSQL数据库基础之上添加了许多附加特性,以提高和O ......
1. Read the Data Block.
2. Read the Row Header.
3. Check the Lock Byte to determine whether there's an ITL entry.
4. Read the ITL entry to determine the Transaction ID (Xid).
5. Read the Transaction Table using the Transaction ID. If the transaction has been committed and has a System Commit ......
PL/SQL单行函数和组函数详解
函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,
这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:
单行函数
组函数
本文将讨论如何利用单行函数以及使用规则。
SQL中的单行函数
SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转 ......