Oracle与DB2数据存储模式的区别详解

发表于:2011-9-29 09:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:zys08    来源:51Testing软件测试网采编

分享:

  “对于索引组织表,虽然存储位置可能会经常发生变化,但是主键是必须存在的。如果不能通过物理位置来寻找,那么通过主键来查找也可以找到这条记录。不过Oracle的实现并不是这么简单。 逻辑ROWID除了包含表的主键信息外,还包括了这条记录在索引创建时的物理地址信息。而这个地址信息,就是用来实现物理猜的。

  如果物理猜能够在目标数据块中找到这条记录,那么这个效率和物理ROWID的效率是一样的,只需要一次IO就找到了目标。如果通过物理猜找不到对应的记录,那么Oracle只能通过逻辑ROWID中包含的主键信息,通过主键扫描来定位这条记录,根据索引的层高,这个操作可能会多消耗几次IO操作。”

  对于DB2,通常情况下,记录的存储位置并不容易发生变化,update也是Position Update为主,尽管这是对cluster规则的一种破坏,但是DB2依靠后端的REORG来进行修复,而换取的好处是记录在前端进行修改的性能。无论是聚簇索引还是非聚簇索引,DB2都通过ROWID来直接定位到记录的物理位置,因此始终是物理ROWID,而无逻辑ROWID的概念。依据引文的观点,Oracle的次索引的逻辑ROWID包含索引创建时记录的物理位置。

  但是,当记录发生多次update后,这个逻辑ROWID能命中的概率会显著下降,不得不借助主键(Primary Key)信息再绕回到聚簇索引上去定位数据记录的位置。这里有两个问题值得注意:

  1、Oracle为了维护cluster规则,记录进行修改时前端的性能会相对较差;

  2、即便这样,cluster规则仍然会被破坏,逻辑ROWID的命中率较低,而必须多做几次I/O,也就是从非聚簇索引再绕回聚簇索引。因此,Oracle对聚簇索引的依赖度更高。

  结论:

  DB2总是通过ROWID来定位记录的物理位置,无论是聚簇索引还是非聚簇索引都一样;Oracle通过聚簇索引的ROWID来定位记录的物理位置,非聚簇索引的ROWID也包含主键信息以利用聚簇索引,但是采用了“物理猜”作为一个捷径,即寄希望于记录的物理位置在非聚簇索引创建后不改变。

  可见,DB2的表数据的存储大多数都是按索引排序的,而Oracle表数据的存储大多数是无序的(这是多么巨大的差异啊)。对这种索引组织表的应用,会有一些限制(比如更适合只读表,等等),而update性能会较差。

  关于Oracle与DB2数据存储模式的区别的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

22/2<12
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号