频道栏目
读书频道 > 数据库 > Oracle > Oracle入门很简单
18.2.3 索引的开销
2012-08-01 16:07:39     我来说两句
收藏   我要投稿

本文所属图书 > Oracle入门很简单

本书从初学者的角度出发,由浅入深、循序渐进地介绍了Oracle数据库开发的基础知识。书中对数据库基本理论及其在数据库开发过程中的应用也有详细介绍。书中也列举了大量示例,可供读者演练。本书共分5篇。第1篇介...  立即去当当网订购

索引在大表查询时可以显著提高查询速度,但并非所有数据表都适合建立索引。这是因为索引的创建需要较大的开销。为一个数据表创建索引只是开销的一部分,当数据表中的数据发生改变时,往往需要维护索引。这里的维护,针对数据的增加、删除、修改,所进行的具体操作也不相同。本节待结合数据的变更,来分析维护索引的开销。

索引可以提高数据查询的效率,并不仅仅在于数据库会自动按照顺序进行搜寻。另一个重要的方面是索引的按块维护策略。一本字典的目录,不仅仅将汉字按照字母表顺序进行排列,而且对其进行了分块处理。例如,一个目录可能的存储结构如图18-8所示。

用户在使用字典时,会首先分析目标字的开头字母,例如,汉字"查",首字母为C,那么用户不会从第一个生字"啊"顺序向下查找;而是直接跳转到C块,然后从C块的第一个汉字"才"进行顺序查找。索引使用了同样的思想,当然,具体的分块策略要复杂得多。

但是,这引起了另外一个问题--维护字典的成本较高。因为字典目录所要维护的汉字索引较多,那么肯定会分为多页。第一次创建字典目录之后,各条目都会占据某页上的一行。现在设想向其中加入新的汉字"白",那么"白"应该处于"吧"与"包"之间。为了完成这一工作,则必须破坏"吧"之后的所有目录的位置及所在页--将其后所有目录条目后移,处于分页临界处的条目也需要进行换页。

当插入数据时,维护表索引的步骤也大体相同。一般情况下,插入数据将导致较大的索引维护开销。当然,开销的大小是由插入数据的排序情况决定的。如果新记录的索引列值位置处于末位,维护索引的开销并不大。

删除数据时,并不会将对应索引条目删除,而是为其添加一个"删除"标识,表示该索引不能再用。如同在字典目录中,删除汉字"粗"的目录信息。只是在其上标识为"删除",而不会真正删除条目,以避免各条目位置的重排,如图18-9所示。

修改数据时,维护索引相当于进行了一次删除和插入操作。Oracle首先将原索引条目标识为"删除",然后向索引中添加新的条目。如图将字典中文中的"参"修改为"超",其新的结构如图18-10所示。

 



图18-8  字典的
目录分块策略
 
图18-9  在字典
目录中删除条目
 
图18-10  在字典
目录中修改条目
通过以上简要分析可知,索引虽然在提高数据库查询效率时非常强大。但是以创建和维护索引的开销为代价的。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:18.2.2 索引的创建与使用
下一篇:18.2.4 索引的使用场景
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站