- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第18章 数据库速度优化与数据完整性 对于大型应用中的数据库系统,性能和安全是两个重要的方面。这里的性能指的是 数据库处理和响应客户端的速度;而保证数据完整性则是安全的体现。本章将详细讲述如何利用索引来提高数据库性能,并综合利用各种约束来保证数据完整性。 索引的原理; 利用索引提高数据库性能; 数据库完整性简介; 利用约束保持数据库完整性。 18.1 利用索引加快数据引用 在数据库系统中,索引是非常重要的一个对象,尤其是面对大型数据表时,索引能大大提高数据检索的速度。本节将介绍索引的原理及索引的使用。 18.1.1 索引的原理 索引在现实世界中最典型的例子莫过于字典检索了。用户在使用字典时,可以使用两种方式,一是逐页翻查,以获得需要查找的目标;二是根据字典的检索目录来获得目标所在的页数,然后直接在该页获得查找目标。毫无疑问,利用检索目录(索引)检索目标是更为高效的方式。 现有的主流数据库都提供了索引这一概念,Oracle也不例外。一旦在数据表的某列上建立了索引,Oracle将另辟新的空间,以存储该列上所有值与其记录的rowid的对应关系。当用户试图以索引列作为搜索条件时,Oracle将利用索引来获得相应的rowid,并捕获该记录。 select * from people where name = David; 当Oracle处理该查询语句时,将执行全表扫描。当搜索到第6条记录时,会发现该条记录符合搜索条件,并将该记录纳入结果集合。但是搜索并不会停止,因为Oracle并不知道在后面的记录中是否仍然存在符合条件的记录。直至搜索完整个表,Oracle才会返回最终的结果集合。 18.1.1 索引的原理 但是,如果预先在表people的name列上创建了一个索引,那么,搜索的顺序将完全不同。创建索引的语法如下所示: create index idx_people_name on people(name) 一旦索引创建,那么表中所有数据将按照字母表顺序进行分块处理,例如,以每5条记录作为一个数据块(当然,实际数据块将大得多)。分块后的数据结构如下图所示。 18.1.1 索引的原理 此时执行搜索语句select * from people where name = ‘David’;时,Oracle只会在第一个数据块中进行搜索,因为数据库知道,第二个数据库都是M以后的数据。当搜索到David之后,如果下一条记录的name列的值不是David,Oracle也将停止搜索,因为列中所有值都是按照字母表顺序进行排列的,所有的“David”位置肯定是相邻的。一旦搜索到“David”,Oracle会马上获得其对应的rowid,并根据rowid快速定位该记录。 对于如下SQL语句,索引的作用会反映的更加清晰。 select * from people where name = Michael; 因为要搜索的条件为name列的值为“Michael”,所以,将会直接跳转到第二个数据块进行搜索,因为第二个数据块才是以M开头的数据。而且,当获得Michael的下一条记录为“Richard”时,将停止搜索,返回结果集合。 18.1.2 利用索引提高数据库性能 索引应用于大数据量的数据表时,将很大程度上提高查询速度。为了演示这种情况,首先来创建一个大的数据表。视图dba_objects可以获得数据库中所有对象的基本信息 create table test_objects as select * from dba_objects; 利用PL/SQL Developer的执行计划查看: select * from test_objects where object_name = PEOPLE‘ 创建索引: create index idx_test_object on test_objects(object_name); 再次查看执行计划。 这里需要注意的是,搜索条件中包含索引列才能真正使用到索引所带来的好处。 select * from test_objects where owner = SCOTT 18.1.3 索引对DML的影响 1.添加数据对索引的影响 以表people为例,一旦在其上创建了索引,向其中插入数据时,数据库将会重新组织索引。 insert into people (ID, NAME, STATUS) values (11, Zoey, ACT); 在以上SQL语句中,向表people中插入名为“Zoey”的用户信息。此时数据库除了正常的插入操作开销之外,还需要将为该记录添加索引项,而索引已有数据块无法满足存储要求,因此,数据库将为其分配新的存储空间,如图所示。 18.1.3 索引对DML的影响 insert into people
您可能关注的文档
- 22--客户端模块的实现 Java编程实战宝典教学课件.ppt
- 第7章 MATLAB解方程与函数极值《MATLAB程序设计教程》课件.ppt
- 第9章 MATLAB符号计算 《MATLAB程序设计教程》课件.ppt
- 第10章 MATLAB图形句柄 《MATLAB程序设计教程》课件.ppt
- 第11章 MATLAB图形用户界面设计 《MATLAB程序设计教程》课件.ppt
- 亲子蒙氏数学班B班教案(40--42个月).doc
- 蒙氏亲子数学班A班教案(37-39个月).doc
- 13-30个月亲子活动教案.doc
- 31-36个月亲子游戏活动教案.doc
- 0-12个月智能素质测评 婴幼儿各年龄段智能素质测评手册.doc
最近下载
- 爱护我们的人民币.ppt VIP
- GJB9001C:2017质量保证大纲.doc VIP
- 可用性人因设计研究报告 .pdf VIP
- 设计概论讲课课件(第三版杨晓琪).pptx VIP
- 西师版六年级数学教案(上学期)全册教学案.pdf VIP
- 1.1+坚持改革开放(课件)-2025-2026学年九年级道德与法治上册(统编版).pptx VIP
- 2025-2026学年初中数学人教版2024八年级上册-人教版2024教学设计合集.docx
- 征信简版电子版PDF个人信用报告最新版2024年可编辑带水印模板.pdf VIP
- 创新创业基础(高职高专版)PPT教学完整课件.ppt
- 人教版小学六年级数学上册全册教案 -(最全).doc VIP
文档评论(0)