ch08索引和查询优化

发布时间:2021-06-11

SQL2008

第8章 索引和查询优化 章本章概述 本章要点 本章内容

2010年11月24日

第1页

SQL2008

本章概述为了加快对表中数据的检索, 为了加快对表中数据的检索,数据库管理系统通 常使用索引技术。索引类似于图书的目录。 常使用索引技术。索引类似于图书的目录。目录 允许用户不必翻阅整本图书就能根据页数迅速找 到所需内容。在数据库中, 到所需内容。在数据库中,索引也允许数据库应 用程序迅速找到表中特定的数据, 用程序迅速找到表中特定的数据,而不必扫描整 个数据库。在图书中, 个数据库。在图书中,目录是内容和相应页码的 列表清单。在数据库中, 列表清单。在数据库中,索引是表中数据和相应 存储位置的列表。 存储位置的列表。 本章详细研究有关索引和查询优化的内容。 本章详细研究有关索引和查询优化的内容。2010年11月24日 第2页

SQL2008

本章要点索引的优点和缺点 堆的结构特点 聚集索引和非聚集索引的特点 索引的类型 使用CREATE INDEX语句创建索引的方式 使用 语句创建索引的方式 索引统计信息的特点和获得方式 查询优化的方式2010年11月24日 第3页

SQL2008

本章内容8.1 8.2 8.3 8.4 8.5 8.6 概述 索引的类型和特点 创建索引 索引维护 查询优化 本章小结

2010年11月24日

第4页

SQL2008

8.1 概述系统中, 在Microsoft SQL Server系统中,可管理的最小 系统中 空间是页。一个页是8KB字节的物理空间。插入 字节的物理空间。 空间是页。一个页是 字节的物理空间 数据的时候, 数据的时候,数据就按照插入的时间顺序被放置 在数据页上。 在数据页上。 一般地, 一般地,放置数据的顺序与数据本身的逻辑关系 之间没有任何联系。因此,从数据之间的逻辑关 之间没有任何联系。因此, 系方面来讲,数据是乱七八糟堆放在一起的。 系方面来讲,数据是乱七八糟堆放在一起的。数 据的这种堆放方式称为堆。 据的这种堆放方式称为堆。当一个数据页上的数 据堆放满之后, 据堆放满之后,数据就得堆放在另外一个数据页 称为页分解。 上,称为页分解。2010年11月24日 第5页

SQL2008

为什么要创建索引呢? 为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。 这是因为,创建索引可以大大提高系统的性能。 第一,创建唯一性索引, 第一,创建唯一性索引,可以保证每一行数据的 唯一性。第二,可以大大加快数据的检索速度。 唯一性。第二,可以大大加快数据的检索速度。 第三,可以加速表和表之间的连接, 第三,可以加速表和表之间的连接,特别是在实 现数据的参考完整性方面特别有意义。第四, 现数据的参考完整性方面特别有意义。第四,

在 使用ORDER BY和GROUP BY子句进行数据检索 使用 和 子句进行数据检索 可以显著减少查询中分组和排序的时间。 时,可以显著减少查询中分组和排序的时间。第 通过使用索引,可以在查询的过程中, 五,通过使用索引,可以在查询的过程中,使用 优化隐藏器,提高系统的性能。 优化隐藏器,提高系统的性能。2010年11月24日 第6页

SQL2008

不利之处这是因为增加索引也有其不利的一面。 这是因为增加索引也有其不利的一面。第 创建索引和维护索引要耗费时间。 一,创建索引和维护索引要耗费时间。第 索引需要占物理空间, 二,索引需要占物理空间,除了数据表占 数据空间之外, 数据空间之外,每一个索引还要占一定的 物理空间,如果要建立聚集索引, 物理空间,如果要建立聚集索引,需要的 空间就会更大。第三, 空间就会更大。第三,对表中的数据进行 增加、删除和修改时, 增加、删除和修改时,索引也要动态地维 这样就降低了数据的维护速度。 护,这样就降低了数据的维护速度。2010年11月24日 第7页

SQL2008

8.2 索引的类型和特点系统中, 在Microsoft SQL Server 2008系统中,有两种 系统中 基本的索引类型:聚集索引和非聚集索引。 基本的索引类型:聚集索引和非聚集索引。除此 之外,还有唯一性索引、包含性列索引、 之外,还有唯一性索引、包含性列索引、索引视 全文索引、 索引等。 图、全文索引、XML索引等。在这些索引类型中, 索引等 在这些索引类型中, 聚集索引和非聚集索引是数据库引擎中索引的基 本类型,是理解唯一性索引、包含性列索引、 本类型,是理解唯一性索引、包含性列索引、索 引视图的基础,本节主要研究这两种索引类型。 引视图的基础,本节主要研究这两种索引类型。 另外,为了更好地理解索引结构, 另外,为了更好地理解索引结构,有必要对堆结 构有所了解。最后, 构有所了解。最后,简单介绍一下系统访问数据 的方式。 的方式。2010年11月24日 第8页

SQL2008

堆堆是不含聚集索引的表, 堆是不含聚集索引的表,表中的数据没有 任何的顺序。 任何的顺序。 堆的信息记录在sys.partitions目录视图中 目录视图中。 堆的信息记录在sys.partitions目录视图中。 每一个堆都可能有多个不同的分区, 每一个堆都可能有多个不同的分区,每一 个分区都有一个堆结构, 个分区都有一个堆结构,每一个分区在 sys.partitions目录视图中都有一行,且 目录视图中都有一行, 目录视图中都有一行 index_id=0。也就是说,每一个堆都可能 。也就是说, 有多个堆结构。 有多个堆结构。2010年11月24日 第9页

SQL2008

堆结构示意图object_id index_id = 0 fir

st_iam_page

IAM

标头

标头

标头

数据行

数据行

数据行

2010年11月24日

第10页

SQL2008

聚集索引聚集索引是一种数据表的物理顺序与索引 顺序相同的索引, 顺序相同的索引,非聚集索引则是一种数 据表的物理顺序与索引顺序不相同的索引。 据表的物理顺序与索引顺序不相同的索引。 聚集索引的叶级和非叶级构成了一个特殊 类型的B树结构 树结构。 树结构中的每一页称为 类型的 树结构。B树结构中的每一页称为 一个索引节点。 一个索引节点。索引的最低级节点是叶级 节点。在一个聚集索引中, 节点。在一个聚集索引中,某个表的数据 页是叶级,在叶级之上的索引页是非叶级。 页是叶级,在叶级之上的索引页是非叶级。 在聚集索引中,页的顺序是有序的。 在聚集索引中,页的顺序是有序的。2010年11月24日 第11页

SQL2008

聚集索引的结构示意图object_id根节点 上一页 下一页 索引行 索引页

index_id = 1

root_page

中间级 键值+行定位符 上一页 下一页 索引行 索引页 上一页 下一页 索引行 上一页 下一页 索引行

叶节点 上一页 下一页 上一页 下一页 数据行 上一页 下一页 数据行 上一页 下一页 上一页 下一页 数据行

……数据页

数据行

……

数据行

2010年11月24日

第12页

SQL2008

非聚集索引非聚集索引与聚集索引具有相同的B树结构, 非聚集索引与聚集索引具有相同的 树结构,但 树结构 在非聚集索引中, 是,在非聚集索引中,基础表的数据行不是按照 非聚集键的顺序排序和存储, 非聚集键的顺序排序和存储,且非聚集索引的叶 级是由索引页而不是由数据页组成。 级是由索引页而不是由数据页组成。 非聚集索引既可以定义在表或视图的聚集索引上, 非聚集索引既可以定义在表或视图的聚集索引上, 也可以定义在表或视图的堆上。非聚集索引中的 也可以定义在表或视图的堆上。 每一个索引行都是由非聚集键值和行定位符组成, 每一个索引行都是由非聚集键值和行定位符组成, 该行定位符指向聚集索引或堆中包含该键值的数 据行。 据行。2010年11月24日 第13页

SQL2008

非聚集索引的结构示意图object_id根节点 上一页 下一页 索引行 非 索引页 聚 集 叶节点 键值+行定位符 上一页 下一页 索引行 索引页 上一页 下一页 索引行 上一页 下一页 索引行 索 引

index_id > 1

root_page

堆 数据页 或 上一页 下一页 上一页 下一页 聚

……

数据行

……

数据行

……

集 索 引

2010年11月24日

第14页

SQL2008

其他类型的索引除了聚集索引和非聚集索引之外, 除了聚集索引和非聚集索引之外, Microsoft SQL Server 2008系统还提供了 系统还提供了 一些其他类型的索引或索引表现形式,

一些其他类型的索引或索引表现形式,这 些内容包括唯一性索引、包含性列索引、 些内容包括唯一性索引、包含性列索引、 索引视图、全文索引和XML索引。 索引。 索引视图、全文索引和 索引

2010年11月24日

第15页

SQL2008

访问数据的方式一般地,访问数据库中数据时, 一般地,访问数据库中数据时,可以采用 两种方法:表扫描和索引查找。 两种方法:表扫描和索引查找。

2010年11月24日

第16页

SQL2008

表扫描表扫描是指系统将指针放在该表的表头数 据所在的数据页上, 据所在的数据页上,然后按照数据页的排 列顺序, 列顺序,一页一页地从前向后扫描该表数 据所占有的全部数据页, 据所占有的全部数据页,直至扫描完表中 的全部记录。在扫描时, 的全部记录。在扫描时,如果找到符合查 询条件的记录, 询条件的记录,那么就将这条记录挑选出 最后, 来。最后,将全部挑选出来符合查询语句 条件的记录显示出来。 条件的记录显示出来。2010年11月24日 第17页

SQL2008

索引查找索引是一种树状结构, 索引是一种树状结构,其中存储了关键字和指向包含关键 字所在记录的数据页的指针。当使用索引查找时, 字所在记录的数据页的指针。当使用索引查找时,系统沿 着索引的树状结构,根据索引中关键字和指针, 着索引的树状结构,根据索引中关键字和指针,找到符合 查询条件的记录。 查询条件的记录。最后将全部查找到的符合查询语句条件 的记录显示出来。当系统沿着索引值查找时, 的记录显示出来。当系统沿着索引值查找时,使用搜索值 与索引值进行比较判断。这种比较判断一直进行下去, 与索引值进行比较判断。这种比较判断一直进行下去,直 到满足下面两个条件为止。 到满足下面两个条件为止。 (1) 搜索值不大于或等于索引值。 搜索值不大于或等于索引值。 (2) 搜索值大于或等于索引页上的最后一个值。 搜索值大于或等于索引页上的最后一个值。

2010年11月24日

第18页

SQL2008

8.3 创建索引系统中, 在Microsoft SQL Server 2008系统中,既 系统中 可以直接创建索引,也可以间接创建索引。 可以直接创建索引,也可以间接创建索引。 当直接创建索引时,可以使用CREATE 当直接创建索引时,可以使用CREATE INDEX语句,也可以使用图形工具。 语句, 语句 也可以使用图形工具。

2010年11月24日

第19页

SQL2008

直接方法和间接方法创建索引的方式可以分为直接方法和间接 方法。 方法。直接创建索引的方法就是使用命令 和工具直接创建索引。 和工具直接创建索引。间接创建索引就是 通过创建其他对象而附加创建了索引, 通过创建其他对象而附加创建了索引

,例 如在表中定义主键约束或唯一性约束时, 如在表中定义主键约束或唯一性约束时, 同时也创建了索引。虽然, 同时也创建了索引。虽然,这两种方法都 可以创建索引,但是, 可以创建索引,但是,它们创建索引的具 体内容是有区别的。 体内容是有区别的。2010年11月24日 第20页

SQL2008

CREATE INDEX语句 语句使用CREATE INDEX语句或使用创建索引 使用 语句或使用创建索引 向导来创建索引, 向导来创建索引,是最基本的索引创建方 并且这种方法最具有柔性, 式,并且这种方法最具有柔性,可以定制 创建出符合自己需要的索引。 创建出符合自己需要的索引。在使用这种 方式创建索引时,可以使用许多选项, 方式创建索引时,可以使用许多选项,例 如指定数据页的充满度、进行排序、 如指定数据页的充满度、进行排序、整理 统计信息等优化索引。使用这种方法, 统计信息等优化索引。使用这种方法,可 以指定索引的类型、唯一性、 以指定索引的类型、唯一性、包含性和复 合性2010年11月24日 第21页

ch08索引和查询优化.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219