数据库系统原理-第八章视图与索引剖析.ppt

数据库系统原理-第八章视图与索引剖析.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 练习 P.207/8.2.2/a),b) Create Trigger DisneyComedyInsert Instead of Insert on DisneyComedies Referencing New Row as NewRow For Each Row Insert into Movies(title,year,length,studioName,genre) Values(NewRow.title, NewRow.year,NewRow.length, ‘Disney’,’comedy’); Page * 作业 P.152/6.1.3/d) P.158/6.2.2/d) P.165/6.3.1/c) P.172/6.4.6/f),h) Page * 8.3 SQL中的索引 在日常生活中,我们经常会用到索引,如图书的目录、 词典的索引等。利用索引,我们可以很快地找到需要找的东 西。 在对数据库进行操作时,用到索引可以提高数据存取的 性能及操作的速度,从而使用户能够较快地查询并准确地得 到希望的数据。 Page * 什么是索引 索引是一个重要的数据库对象,它类似于图书中的目录。 索引使数据库不用对整个表进行扫描就能找到所需的数据。 (1) 使用索引的优点 1) 创建唯一索引,可以保证表中的数据记录不重复。 2) 加快数据检索速度。 3) 加速表与表之间的连接。 4) 在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询 中分组和排序的时间。 5) 可以在检索数据的过程中使用优化隐藏器,从而提高系统的性能。 Page * 8.3 SQL中的索引 (2) 创建索引的原则 1) 主键列上一定要建立索引。 2) 在连接中频繁使用的列,比如外键。 3) 在频繁查询的列上最好建立索引。 4) 对于text、image和bit数据类型的列不要建立索引。 5) 对于具有重复值较多的列不要建立索引。 (3) 索引并非越多越好 1) 创建索引要花费时间并占用存储空间,聚集索引更严重。 2) 维护索引也要花费时间。 3) 当对表进行修改时,需要维护索引,插入、更新和删除的数据越多, 维护的开销就越大。 Page * 索引类型 按照存储方式主要分为两类: 聚集索引 非聚集索引 Page * 8.3 SQL中的索引 1. 聚集索引 指表中数据行的物理存储顺序与索引顺序完全相同。 每个表只能创建一个聚集索引。 Page * 8.3 SQL中的索引 2. 非聚集索引 非聚集索引具有与表的数据完全分离的结构。 表中的每一个列上都可以有自己的非聚集索引 创建的非聚集索引最多为249个 Page * * 关系中属性A上的索引是一种数据结构,它能提高在属性A上查找具有某个特定值的元组的效率。 可以把索引认为是一棵二叉查找树中的键-值对,在键-值对中,一个键a(属性A可能含有的一个值)与一个“值”相关联,而该值是属性A上分量具有值a的元组集的存放位置。 注意:索引的属性称为索引键,可以来自关系的任何一个属性(组),而不必是建立索引的关系的键属性。 8.3 SQL中的索引 * 1. 建立索引的动机 关系Movies中可能存在10000个电影元组,但只有大约200部是1990年制作的。 若在year上有索引,根据索引仅取出年份值为1990的200个元组并逐个测试电影公司是否是Disney,那么查询效率就会大大提高。 如果在(year,studioName)上有索引,查询效率更高 SELECT * FROM Movies WHERE studioName=‘Disney’ AND year=1990 ; * 1. 建立索引的动机(续1) 在包含连接的查询中,索引同样非常有用。 若关系Movies的title属性上有索引,则通过索引可直接获取title为Star Wars的元组,从而析取该元组producerC#的值。 假设关系MovieExec的cert#属性上也有索 SELECT name FROM Movies, MovieExec WHERE title=‘Star Wars’ AND producerC#=cert# ; 注意 通过这两个索引,仅需察看分别来自两个关系中的两个元组,而它们是回答该查询所真正需要的。 若没有索引,就需要遍历两个关系的每一个元组。 * 2.索引的声明 创建索引 示例: 删除索引 示例: CREATE INDEX Yearlndex ON Movies (year) ; CREATE INDEX Keylndex ON Movies (title, year); DROP INDEX 索

文档评论(0)

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

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

1亿VIP精品文档

相关文档