- 1、本文档共102页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章数据库存储技术
5.1 物理存储介质 5.2 文件组织 DBMS的高层(逻辑层和视图层)把数据看成是“记录”(行)的集合,即将关系表中的元组映射成文件的逻辑记录。数据库文件采用两种逻辑记录格式:定长记录和变长记录格式存储。 索引支持的查询类型 支持范围检索 支持等值查询,或者叫点查询 散列与索引比较举例之二 select A1, A2, … , An from r where Ai = c1 AND Ai = c2 使用索引时,首先确定数据c1所在的位置,然后顺着索引顺序文件中的有哪些信誉好的足球投注网站码链表或B+树索引中的叶结点的Pn指针链继续查找,直到确定数据c2的位置为止; 如果使用散列,由于散列函数的随机性,将不得不读取散列文件的所有存储桶。 5.10 顺序索引和散列的比较 问题的提出 到目前为止,都隐含地假设在关系上查询时只使用一个索引或散列; 如果存在多个索引,该如何处理呢?例如: 假设文件student上有两个索引,分别建立在student_name和department_name上。考虑如下查询: select student_number from student where student_name = “陈国围” AND department_name = “计算机系” 问题:对于这个查询,如何利用上面已有的两个索引呢? 5.11多码访问 多个索引的利用 处理前面的查询有两种策略: 只利用其中一个索引: 利用student_name上的索引,找出“陈国围”的所有记录,然后检查每条记录是否满足条件:department_name = “计算机系”; 利用department_name上的索引,找出所有“计算机系”的记录,然后检查每条记录是否满足条件:student_name = “陈国围”; 到底利用哪一个索引,由什么来决定? 利用上述两个索引分别找出指向满足各自条件的所有记录的索引指针,然后计算这两个指针集的交集即可得到结果。 5.11多码访问 多个索引的利用 上面两种策略中,最后一个方案同时利用了两个索引但它有可能是最糟糕的选择: 名字是“陈国围”的记录太多; “计算机系”的学生记录太多; “计算机系”中名字为“陈国围”的记录很少。 这样的话,为了得到一个很小的结果,将不得不扫描大量的指针; 最好的解决方案是在复合有哪些信誉好的足球投注网站码: (student_name, department_name) 上建立并使用索引,这样的索引叫复合索引 5.11多码访问 B+树与B树结构 簇集索引采用B+树结构:其建立过程如何? 簇集索引的叶级页是真正的数据页。 非簇集索引采用B树结构:RID? 实践中为什么要求一个表最好能有一个主索引? SQL Server的索引结构 B+树与B树结构 查询举例: SQL Server的索引结构 Oracle的B +树索引 Index Block Table Block SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD MILLER TURNER BLAKE JAMES KING ROWID ROWID 块号 行号 文件ID rowid xxxxx.xxx.xxx 例如,Select * From emp Where ename=‘FORD’ ROWID Create index 索引名 on emp(ename); 此命令后,Oracle会维护如图所示的索引结构。建立了索引的列值(如职工姓名)都会出现在索引的叶子结点上,且叶子结点的每一项都含有一个指向基表相应记录的指针rowid 索引与散列小结 存取路径的实现策略 索引、散列、簇集 索引本身的文件结构类型 主索引的特征与结构 散列文件与散列索引的区别 B+树索引的结构特征 实践中如何正确地建立索引? 一个巨大的关系表 DBMS的参数与性能调整工具 复合索引 对customer中的每个记录,我们把depositor关系中具有相同name的记录集中放在文件的一个物理块中。如果放不下,可以放在临近的块中。这种文件结构称为簇集。但是簇集导致查询select * from customer变慢,因为对于customer中的每个记录几乎都要进行一次读块的操作!而且还要引入附加的结构:用指针把customer记录链接起来。 顺序索引的分类 稀疏索引: 只为有哪些信誉好的足球投注网站码的部分值建立索引项; 与稠密索引一样,每个索引项也
文档评论(0)