横向比较数据库中不同的索引机制--

横向比较数据库中不同的索引机制--

ID:9721706

大小:61.00 KB

页数:8页

时间:2018-05-06

横向比较数据库中不同的索引机制--_第1页
横向比较数据库中不同的索引机制--_第2页
横向比较数据库中不同的索引机制--_第3页
横向比较数据库中不同的索引机制--_第4页
横向比较数据库中不同的索引机制--_第5页
资源描述:

《横向比较数据库中不同的索引机制--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、横向比较数据库中不同的索引机制>>  一、引言  对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮助。有不少存疑的地方,诚心希望各位不吝赐教指正,共同进步。  二、B-Tree  我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。所以在最开始,简单地介绍一下B-Tree。  B-Tree不同于BinaryTree(二叉树,最多有两个子树),一棵M阶的B-Tree满足以下条件:  1)每个结点至多有M个

2、孩子;  2)除根结点和叶结点外,其它每个结点至少有M/2个孩子;  3)根结点至少有两个孩子(除非该树仅包含一个结点);  4)所有叶结点在同一层,叶结点不包含任何关键字信息;  5)有K个关键字的非叶结点恰好包含K+1个孩子;  另外,对于一个结点,其内部的关键字是从小到大排序的。以下是B-Tree(M=4)的样例:  图片看不清楚?请点击这里查看原图(大图)。  对于每个结点,主要包含一个关键字数组Key[],一个指针数组(指向儿子)Son[]。在B-Tree内,查找的流程是:使用顺序查找(数组长度较短时)或折半查找方法查找Key[]数组,若找到关键字K,则返回该结点的地址及K在Ke

3、y[]中的位置;否则,可确定K在某个Key[i]和Key[i+1]之间,则从Son[i]所指的子结点继续查找,直到在某结点中查找成功;或直至找到叶结点且叶结点中的查找仍不成功时,查找过程失败。  接着,我们使用以下图片演示如何生成B-Tree(M=4,依次插入1~6):  从图可见,当我们插入关键字4时,由于原结点已经满了,故进行分裂,基本按一半的原则进行分裂,然后取出中间的关键字2,升级(这里是成为根结点)。其它的依类推,就是这样一个大概的过程。  三、数据库索引  1.什么是索引  在数据库中,索引的含义与日常意义上的索引一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访

4、问速度的数据库对象。  A)索引可以避免全表扫描。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。  B)对于非聚集索引,有些查询甚至可以不访问数据页。  C)聚集索引可以避免数据插入操作集中于表的最后一个数据页。  D)一些情况下,索引还可用于避免排序操作。  当然,众所周知,虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。  2.索引的存储  一条索引记录中包含的基本信息包括:键值(即你定义索引时指定的所有字段的值)+逻辑指针(指向数据页或者另一索引页)。  图片看不清楚?请点击这里查看原图(大图)。  当你为一张

5、空表创建索引时,数据库系统将为你分配一个索引页,该索引页在你插入数据前一直是空的。此页此时既是根结点,也是叶结点。每当你往表中插入一行数据,数据库系统即向此根结点中插入一行索引记录。当根结点满时,数据库系统大抵按以下步骤进行分裂:  A)创建两个儿子结点  B)将原根结点中的数据近似地拆成两半,分别写入新的两个儿子结点  C)根结点中加上指向两个儿子结点的指针  通常状况下,由于索引记录仅包含索引字段值(以及4-9字节的指针),索引实体比真实的数据行要小许多,索引页相较数据页来说要密集许多。一个索引页可以存储数量更多的索引记录,这意味着在索引中查找时在I/O上占很大的优势,理解这一点有助于

6、从本质上了解使用索引的优势。  3.索引的类型  A)聚集索引,表数据按照索引的顺序来存储的。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。  B)非聚集索引,表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与数据表行数据量一致。  在一张表上只能创建一个聚集索引,因为真实数据的物理顺序只可能是一种。如果一张表没有聚集索引,那么它被称为堆集(Heap)。这样的表中的数据行没有特定的顺序,所有的新行将被添加的表的末尾位置。  4.聚集索引  在聚集索引中,叶结点也即数据结点,所有数据行的存储顺序与索

7、引的存储顺序一致。  图片看不清楚?请点击这里查看原图(大图)。  1)聚集索引与查询操作  如上图,我们在名字字段上建立聚集索引,当需要在根据此字段查找特定的记录时,数据库系统会根据特定的系统表查找的此索引的根,然后根据指针查找下一个,直到找到。例如我们要查询Green,由于它介于[Ben,Karsen],据此我们找到了索引页1007,在该页中Green介于[Greane,Hu12下一页>>>>这篇文章来自..,。nt

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。