第6章 索引.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1 创建索引的原因及应该考虑的问题 索引是对数据库表中一个或多个列的值进行排序的结构,用于快速访问数据库表中的特定数据。 索引提供指针指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。 索引是由索引页面组成,每个索引页面中的行都包含逻辑指针,通过该指针可以直接检索到数据,从而加快物理数据的索引。 索引的优点: 1. 提高查询速度 2. 提高连接、ORDER BY和GROUP BY执行的速度 3. 查询优化器依靠索引起作用 4. 强制实施行的唯一性 索引也是有代价的 索引占用空间 索引需要维护,数据更新时,需重新索引 设计索引时,应确保对性能的提高程度大于在存储空间和处理资源方面的代价 需要创建索引的情况: 经常查询某列中的数据时,才需要在表上创建包含该列的索引。索引将占用磁盘空间,并且降低添加、删除和更新行的速度。不过在多数情况下,索引所带来的检索速度的优势超过他的不足之处。然而,如果应用程序频繁地更新数据或磁盘空间有限,最好限制索引的数量。 索引对下列查询有帮助 精确匹配查询:搜索符合特定搜索关键字值的行 范围查询:搜索其搜索关键字的值为范围值的行 连接查询 分组查询 搜索重复值,以实施PRIMAY KEY和UNIQUE约束 搜索已定义了FOREIGN KEY约束的两个表之间匹配的行 6.1.2 创建索引应该考虑的问题 创建索引应考虑的主要因素: 一个表如果建有大量索引会影响INSERT、UPDATE和DELETE语句的性能,因为在表中的数据更改时,所有索引都需进行适当的调整。另一方面,对于不需要修改数据的查询,大量索引有助于提高性能,因为有更多的索引可供选择,以便确定以最快速度访问数据的最佳方法。 覆盖的查询可以提高性能。覆盖的查询是指查询中所有指定的列都包含在同一个索引中。因为检索数据时只需引用表的索引页,不必引用数据页。 对小型表进行索引可能不会产生优化效果,因为SQL Server在遍历索引以搜索数据时,花费的时间可能会比简单的表扫描还长。 应使用SQL事件探查器和索引优化向导帮助分析查询,确定要创建的索引。 可以在视图和计算列上指定索引。 下面的情况则不考虑建立索引: 从来不或者很少在查询中引用的列 值很少的列,例如性别(男或女) 记录数很少的表 6.2 索引类型 聚集索引:数据库表中记录的物理顺序与索引顺序相同,一个表只有一个。 非聚集索引:数据库表中记录的物理顺序与索引顺序可以不同。一个表可有多个。 唯一索引:索引列不包含重复的值 组合索引:索引中包含多列 6.2.1 B-Tree索引结构 B-Tree(Balanced Tree)的顶端结点称为根结点,底层结点称为叶结点,在根结点和叶结点之间的称为中间结点。B-Tree数据结构从根结点开始,以左右平衡的方式排列数据,中间可以根据需要分成许多层。 使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。 6.2.1 B-Tree索引结构 例如: 聚集索引和非聚集索引都使用B-Tree结构建立。 聚集索引和非聚集索引都包括索引页和数据页,索引页用来放索引键值和指到下一层的指针,数据页用来存放记录。 6.2.2 聚集索引和非聚集索引 1.聚集索引:表中存储的数据按照索引的顺序存储,即表中记录的物理顺序与索引顺序相同。 聚集索引的一个数据页包含一笔记录,再由多个数据页生成一个中间结点的索引页,接着由数个中间节点的索引页合成更上层的索引页,组合后生成最顶层的根节点的索引页。图6.2 聚集索引的特点: 聚集索引对经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理顺序上也是相邻的。 聚集索引的检索效率比非聚集索引高,但对数据新增、修改和删除的影响比较大。一个表只有一个聚集索引。 如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上进行聚集索引,避免每次查询该列时都进行排序,从而节省检索时间。 如果表中没有创建聚集索引,则在表的主键列上自动创建聚集索引。若有了聚集索引再创建主键,则会自动创建一个以主键为索引的非聚集索引。 可考虑将聚集索引用于下面几种情况: 包含大量非重复值的列。 使用下列运算符返回一个范围值的查询:BETWEEN、、=、和=。 被连续访问的列。 返回大型结果集的查询。 经常被使用连接或GROUP BY子句的查询访问的列。 要求进行非常快的单行查询的联机事务处理程序。 2.非聚集索引:对表中的数据进行逻辑排序,不影响表中的数据存储顺序,即数据存储在一个地方,索引存储在另一个地方。 非聚集索引与聚集索引一样有B_Tree结构,但有两个差别: 数据行不按非聚集索引键的顺序

文档评论(0)

精华文档888 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档