第4章索引与哈希.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章索引与哈希.ppt

第4章 索引与哈希 索引的基本概念 树结构索引 ISAM索引 B+树索引 基于哈希的索引 静态哈希 可扩展哈希 线性哈希 4.1 索引的基本概念 一个索引是用来基于查找关键字字段加快查找速度,查找关键字不同于关键字的概念,一般索引由查找关键字值,记录指针的集合组成 索引性能评价指标 访问类型:值查找与范围查找 时间开销:查找时间、插入时间、删除时间 空间开销:索引结构需要额外存储空间 (3) 索引分类 -- 主索引与辅助索引 主索引:如果数据文件是按某个索引的查找关键字来排序的话则称该索引是主索引,主索引的记录排序与数据文件相同 辅助索引:如果数据文件的排序关键字与某个索引的查找关键字不同的话则称该索引为辅助索引,辅助索引的记录排序与数据文件不同 顺序文件:一个主索引文件+在查找关键字上排序的数据文件 (3) 索引分类 -- 聚簇与非聚簇索引 (3) 索引分类 --稠密索引和稀疏索引 稠密索引:在数据文件中对于每个查找关键字的值都对应一个索引记录或索引入口 稀疏索引:在数据文件中某些(而不是所有)查找关键字的值在索引文件中存在索引记录 4.2 树结构索引 -- ISAM 索引顺序存取方法(ISAM—Indexed Sequential Access Method ) ISAM索引结构如下图所示 索引入口:查找关键字值, pid 当索引文件本身变得很大时,可以形成索引文件的索引,这样就形成一个树形结构 4.2 树结构索引 -- ISAM ISAM树示例 假定一个节点可以存放2个入口项 插入23*,48*,41*,42* 删除42*,51*,97* ISAM树 查找 cost = logFN, F=索引页中入口项数, N=叶子页面数 插入:找到适当的叶子数据入口进行插入 删除:找到适当的叶子数据入口进行插入 ISAM: 静态树结构 4.2 树结构索引 -- B+树 B+树示例 B+树的主要特征 树上的操作(插入、删除)能保持树的平衡。 除了根结点外,每一个节点都将保证最小的50%占有率。 搜索记录需要从根开始遍历到合适的叶子。从根到叶子的路径长度称为树的高度。由于高扇出率,B+树的高度很少超过3或4。 每个节点包含m个目录项,其中d=m=2d,d是B+树的一个参数,称为树的秩,它是树节点容量的度量。根结点只需满足1=m=2d。 B+树 -- 8K页 索引页中平均入口项数=200, 平均填充率=0.67,平均fanout=200*0.67=133 索引能力 h=3:1333=2,352,637(个记录) h=4:1334=312,900,700 (个记录) 索引大小 h=1:1页=8K h=2:133页=1M h=3:1332=17,689页=133M B+树上的操作—搜索 func find(搜索码值K) returns nodepointer //给定一个搜索码值,找出它的叶子节点 返回tree_search( root , K );//从根开始搜索 endfunc func tree_search( nodepointer , 搜索码值K) returns nodepointer //在树上搜索数据项 如果 *nodepointer是一个叶子,返回nodepointer; 否则, 如果KK1,则返回tree_search(P0 , K); 否则, 如果K=Km , 则返回tree_search(Pm , K);//m=#节点包含的目录项数 否则, 找到满足Ki=KKi+1条件的i; 返回tree_search(Pi , K); endfunc 代价:cost = logFN 4.2 树结构索引 -- B+树 B+树示例 B+树上的操作—插入 插入 找到适当的页子节点L 向L插入数据入口 若L有空闲入口项,则插入 分裂L==L和L2 均匀分配入口项 将指向L2的索引入口插入到L的父节点中 可能会引起递归分裂 Cost = logFN B+树上的操作—插入 proc insert ( nodepointer , entry , newchildentry ) //把entry插入到根为“*nodepointer”的子树中;秩为d; // “newchildentry”开始时是null,除非孩子被分裂,否则将一直返回为null 如果*nodepointer是一个非叶子节点,设为N 找到满足Ki=entry的码值Ki+1条件的i; //选择子树 insert (Pi , entry , newchildentry ); //递归插入entry 如果newchildentry为null,返回; //通常的情况,不分裂孩子 否则,

您可能关注的文档

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档