SQL_SERVER_2005之9索引和查询优化.ppt_第1页
SQL_SERVER_2005之9索引和查询优化.ppt_第2页
SQL_SERVER_2005之9索引和查询优化.ppt_第3页
SQL_SERVER_2005之9索引和查询优化.ppt_第4页
SQL_SERVER_2005之9索引和查询优化.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2020年9月22日,第1页,第9章 索引和查询优化,学习目标 本章重点 本章内容,2020年9月22日,第2页,学习目标,数据库管理系统通常使用索引技术加快对表中数据的检索。索引类似于图书的目录。目录允许用户不必翻阅整本图书就能根据页数迅速找到所需内容。在数据库中,索引也允许数据库应用程序迅速找到表中特定的数据,而不必扫描整个数据库。 在图书中,目录是内容和相应页码的列表清单。在数据库中,索引是表中数据和相应存储位置的列表。 本章将详细研究有关索引和查询优化的内容。,2020年9月22日,第3页,本章重点,索引的特点 索引的类型 创建索引 索引信息 优化索引 优化查询,2020年9月22日,

2、第4页,本章内容,9.1 概述 9.2 索引的类型和特点 9.3 创建索引 9.4 索引维护 9.5 查询优化 9.6 上机练习 9.7 习题,2020年9月22日,第5页,本章内容,9.1 概述 9.2 索引的类型和特点 9.3 创建索引 9.4 索引维护 9.5 查询优化 9.6 上机练习 9.7 习题,2020年9月22日,第6页,9.1 概述,在Microsoft SQL Server系统中,可管理的最小空间是页。一个页是8KB字节的物理空间。插入数据的时候,数据就按照插入的时间顺序被放置在数据页上。一般地,放置数据的顺序与数据本身的逻辑关系之间是没有任何联系的。 因此,从数据之间的逻

3、辑关系方面来讲,数据是乱七八糟堆放在一起的。数据的这种堆放方式称为堆。 当一个数据页上的数据堆放满之后,数据就得堆放在另外一个数据页上,这时就称为页分解。,2020年9月22日,第7页,为什么要创建索引呢?,索引是一种与表或视图关联的物理结构,可以用来加快从表或视图中检索数据行的速度。 为什么要创建索引呢?这是因为创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用ORDER BY和GROUP BY子句进行数据检索

4、时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。 正是因为上述这些原因,所以应该对表增加索引。,2020年9月22日,第8页,为什么不对表中的每一个列创建一个索引呢?,也许会有人要问增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢? 虽然索引有许多优点,但是为表中的每一个列都增加索引是非常不明智的做法。这是因为增加索引也有其不利的一面。 第一,创建索引和维护索引要耗费时间。 第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。如果要建立聚集索引,那么需要的空间就会更大。 第三,当对表

5、中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。,2020年9月22日,第9页,索引是建立在列的上面,在经常需要搜索的列上创建索引; 在主键上创建索引; 在经常用于连接的列上创建索引,也就是在外键上创建索引; 在经常需要根据范围进行搜索的列上创建索引(因为索引已经排序,其指定的范围是连续的); 在经常需要排序的列上创建索引(因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间); 在经常用在WHERE子句中的列上创建索引。,2020年9月22日,第10页,本章内容,9.1 概述 9.2 索引的类型和特点 9.3 创建索引 9.4 索引维护 9.5

6、查询优化 9.6 上机练习 9.7 习题,2020年9月22日,第11页,9.2 索引的类型和特点,在Microsoft SQL Server 2005系统中有两种基本的索引类型:聚集索引和非聚集索引。 除此之外,还有唯一性索引、包含性列索引、索引视图、全文索引及XML索引等。在这些索引类型中,聚集索引和非聚集索引是数据库引擎中索引的基本类型,是理解唯一性索引、包含性列索引、索引视图的基础, 本节主要研究这两种索引类型。 另外,为了更好地理解索引结构,有必要对堆结构有所了解。 最后,简单介绍一下系统访问数据的方式。,2020年9月22日,第12页,堆,堆是不含聚集索引的表,表中的数据没有任何的

7、顺序。 堆的信息记录在sys.partitions目录视图中。每一个堆都可能有多个不同的分区,每一个分区都有一个堆结构,每一个分区在sys.partitions目录视图中都有一行,且index_id=0。也就是说,每一个堆都可能有多个堆结构。,2020年9月22日,第13页,堆结构示意图,2020年9月22日,第14页,聚集索引,聚集索引是一种数据表的物理顺序与索引顺序相同的索引,非聚集索引则是一种数据表的物理顺序与索引顺序不相同的索引。 聚集索引的叶级和非叶级构成了一个特殊类型的B树结构。B树结构中的每一页称为一个索引节点。索引的最低级节点是叶级节点。 在一个聚集索引中,某个表的数据页是叶级

8、,在叶级之上的索引页是非叶级。在聚集索引中,页的顺序是有序的。应该在表中经常搜索的列或按照顺序访问的列上创建聚集索引。其中,用于指定聚集索引第一页地址信息的root_page来自sys.system_internal_allocation_units系统视图中。聚集索引的结构示意图如图9-2所示。,2020年9月22日,第15页,聚集索引的结构示意图,2020年9月22日,第16页,非聚集索引,非聚集索引与聚集索引具有相同的B树结构,但是在非聚集索引中,基础表的数据行不是按照非聚集键的顺序排序和存储,且非聚集索引的叶级是由索引页而不是由数据页组成。 非聚集索引既可以定义在表或视图的聚集索引上,

9、也可以定义在表或视图的堆上。非聚集索引中的每一个索引行都是由非聚集键值和行定位符组成,该行定位符指向聚集索引或堆中包含该键值的数据行。如果表或视图中没有聚集索引(堆),则行定位符是指向行的指针RID,而RID由文件标识符ID、页码和页上的行数生成。如果表或视图上有聚集索引,则行定位符则是行的聚集索引键。非聚集索引的结构示意图如图9-3所示。,2020年9月22日,第17页,非聚集索引的结构示意图,2020年9月22日,第18页,其他类型的索引,除了聚集索引和非聚集索引之外,Microsoft SQL Server 2005系统还提供了一些其他类型的索引或索引表现形式,这些内容包括唯一性索引、包

10、含性列索引、索引视图、全文索引和XML索引。 在创建聚集索引或非聚集索引时,索引键可以都不相同,也可以包含重复值。如果希望索引键都各不相同,那么必须创建唯一性索引。当然,在创建聚集索引或非聚集索引时,都可以指定该索引具有唯一性的特点。这种唯一性与前面讲过的主键约束是关联的,某种程度上可以说,主键约束等于唯一性的聚集索引。 如果多个列的字节总数大于900字节且又希望将这些列都包含在索引中,那么可以使用包含性列索引。 如果希望提高视图的查询效率,可以将视图的索引物理化,也就是说将结果集永久存储在索引中。 全文索引是一种特殊类型的基于标记的索引,是通过Microsoft SQL Server的全文引

11、擎服务创建、使用和维护,其目的是为用户提供在字符串数据中高效率地搜索复杂的词语。这种索引的结构与数据库引擎使用的聚集索引或非聚集索引的B树结构是不同的。 XML索引是与XML数据关联的索引形式,是XML二进制BLOB的已拆分持久表示形式。XML索引又可以分为主索引和辅助索引。,2020年9月22日,第19页,访问数据的方式,访问数据库中数据时,可以采用两种方法即表扫描和索引查找。 第一种方法是表扫描,就是指系统将指针放在该表的表头数据所在的数据页上,然后按照数据页的排列顺序,逐页地从前向后扫描该表数据所占有的全部数据页,直至扫描完表中的全部记录。在扫描时,如果找到符合查询条件的记录,那么就将这

12、条记录挑选出来。最后,将全部挑选出来符合查询语句条件的记录显示出来。 第二种方法是使用索引查找。索引是一种树状结构,其中存储了关键字和指向包含关键字所在记录的数据页的指针。当使用索引查找时系统将沿着索引的树状结构,根据索引中关键字和指针找到符合查询条件的记录。最后将全部查找到的符合查询语句条件的记录显示出来。当系统沿着索引值查找时,使用搜索值与索引值进行比较判断。这种比较判断一直进行下去,直到满足下面两个条件为止: 搜索值不大于或等于索引值。 搜索值大于或等于索引页上的最后一个值。,2020年9月22日,第20页,本章内容,9.1 概述 9.2 索引的类型和特点 9.3 创建索引 9.4 索引

13、维护 9.5 查询优化 9.6 上机练习 9.7 习题,2020年9月22日,第21页,9.3 创建索引,在Microsoft SQL Server 2005系统中,既可以直接创建索引,也可以间接创建索引。 当直接创建索引时,可以使用CREATE INDEX语句,也可以使用图形工具。,2020年9月22日,第22页,直接方法和间接方法,可以把创建索引的方式分为直接方法和间接方法。 直接创建索引的方法就是使用命令和工具直接创建索引。 间接创建索引就是通过创建其他对象而附加创建了索引,例如在表中定义主键约束或唯一性约束的同时也创建了索引。虽然,这两种方法都可以创建索引,但是它们创建索引的具体内容是

14、有区别的。 使用CREATE INDEX语句或使用创建索引向导来创建索引,这是最基本的索引创建方式,并且这种方法最具有柔性,可以定制创建出符合自己需要的索引。 通过定义主键约束或唯一性约束,也可以间接创建索引。,2020年9月22日,第23页,CREATE INDEX语句,CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_name ON table_or_view_name ( column ASC | DESC ,.n ) INCLUDE (column_name, n) WITH ( PAD_INDEX = ON | OFF | FILL

15、FACTOR = fillfactor | SORT_IN_TEMPDB = ON | OFF | IGNORE_DUP_KEY = ON | OFF | STATISTICS_NORECOMPUTE = ON | OFF | DROP_EXISTING = ON | OFF | ONLINE = ON | OFF | ALLOW_ROW_LOCKS = ON | OFF | ALLOW_PAGE_LOCKS = ON | OFF | MAXDOP = max_degree_of_parallelism), n ON partition_schema_name (column_name) |

16、filegroup_name | default,2020年9月22日,第24页,【例9-1】使用CREATE INDEX语句创建唯一性的聚集索引,2020年9月22日,第25页,【例9-2】使用CREATE INDEX语句创建唯一性的非聚集索引,2020年9月22日,第26页,【例9-3】使用CREATE INDEX语句创建包含性列索引,2020年9月22日,第27页,【例9-4】使用DROP INDEX语句删除指定的索引,2020年9月22日,第28页,数据库引擎优化顾问,使用Microsoft SQL Server 2005的数据库引擎优化顾问,用户可以方便地选择和创建索引、索引视图和分

17、区的最佳集合。 数据库引擎优化顾问分析一个或多个数据库的工作负荷和实现,其中工作负荷是对要优化的一个或多个数据库执行的一组Transact-SQL语句。 数据库引擎优化顾问的输入是由SQL Server Profiler生成的跟踪文件、指定的跟踪表或工作负荷。数据库引擎优化顾问的输出是修改数据库的物理设计结构的建议,其中物理设计结构包括聚集索引、非聚集索引、索引视图、分区等。,2020年9月22日,第29页,【例9-5】使用数据库引擎优化顾问,2020年9月22日,第30页,【例9-5】,2020年9月22日,第31页,查看索引信息,在Microsoft SQL Server 2005系统中,

18、可以使用一些目录视图和系统函数查看有关索引的信息。 这些目录视图和系统函数的描述说明如表9-1所示。,2020年9月22日,第32页,【例9-6】查看索引信息,2020年9月22日,第33页,本章内容,9.1 概述 9.2 索引的类型和特点 9.3 创建索引 9.4 索引维护 9.5 查询优化 9.6 上机练习 9.7 习题,2020年9月22日,第34页,9.4 索引维护,索引在创建之后,由于数据的增加、删除、更新等操作使得索引页发生碎块,为了提高系统的性能,必须对索引进行维护。 这些维护包括查看碎块信息、维护统计信息、分析索引性能及删除重建索引等。,2020年9月22日,第35页,查看索引

19、统计信息,索引统计信息是查询优化器用来分析和评估查询、确定最优查询计划的基础数据。一般地,用户可以通过常用的方式访问指定索引的统计信息。一种方式是使用DBCC SHOW_STATISTICS命令,另一种是使用图形化工具。 DBCC SHOW_STATISTICS命令可以用来返回指定表或视图的特定对象的统计信息,这些特定对象可以是索引、列等。,2020年9月22日,第36页,【例9-7】查看索引统计信息,2020年9月22日,第37页,查看索引的碎片信息,可以使用两种方式查看有关索引的碎片信息,使用sys.dm_db_index_physical_stats系统函数和使用图形化工具。 注意,sys.dm_db_index_physical_stats系统函数替代了以前版本中的DBCC SHOWCONTIG命令。,2020年9月22日,第38页,【例9-8】查看索引碎片信息,2020年9月22日,第39页,维护索引统计信息,统计信息是存储在Microsoft SQL Server中的列数据的样本。 这些数据一般地用于索引列,但是还可以为非索引列创建统计。Microsoft SQL Server维护某一个索引关键值的分布统计信息,并且使用这些统计信息来确定在查询进程中哪一个索引是有用的。查询的优化依赖于这些

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论