《索引和查询优化精品文稿.ppt》由会员分享,可在线阅读,更多相关《索引和查询优化精品文稿.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、索引和查询优化索引和查询优化10/24/20221第1页,本讲稿共20页教学目标教学目标l理解索引的优点和缺点理解索引的优点和缺点l理解堆的结构特点理解堆的结构特点l理解聚集索引和非聚集索引的特点理解聚集索引和非聚集索引的特点l理解索引的类型理解索引的类型l使用使用CREATE INDEX语句创建索引的方式语句创建索引的方式l理解索引统计信息的特点和获得方式理解索引统计信息的特点和获得方式l理解查询优化的方式理解查询优化的方式10/24/20222第2页,本讲稿共20页教学过程教学过程8.1 概述概述8.2 索引的类型和特点索引的类型和特点8.3 创建索引创建索引 8.4 索引维护索引维护8.
2、5 查询优化查询优化10/24/20223第3页,本讲稿共20页8.1 概述概述l在在Microsoft SQL Server系统中,可管理的最小空间是页。系统中,可管理的最小空间是页。一个页是一个页是8KB字节的物理空间。插入数据的时候,数据就按照插入字节的物理空间。插入数据的时候,数据就按照插入的时间顺序被放置在数据页上。一般地,放置数据的顺序与数据本身的时间顺序被放置在数据页上。一般地,放置数据的顺序与数据本身的逻辑关系之间是没有任何联系的。因此,从数据之间的逻辑关系方的逻辑关系之间是没有任何联系的。因此,从数据之间的逻辑关系方面来讲,数据是乱七八糟堆放在一起的。面来讲,数据是乱七八糟堆
3、放在一起的。l数据的这种堆放方式称为堆。当一个数据页上的数据堆放满之后,数数据的这种堆放方式称为堆。当一个数据页上的数据堆放满之后,数据就得堆放在另外一个数据页上,这时就称为页分解。据就得堆放在另外一个数据页上,这时就称为页分解。l索引是一种与表或视图关联的物理结构,可以用来加快从表或视索引是一种与表或视图关联的物理结构,可以用来加快从表或视图中检索数据行的速度。图中检索数据行的速度。10/24/20224第4页,本讲稿共20页8.2 索引的类型和特点索引的类型和特点l在在Microsoft SQL Server 2005系统中,有两种基本的系统中,有两种基本的索引类型:聚集索引和非聚集索引。
4、除此之外,还有惟索引类型:聚集索引和非聚集索引。除此之外,还有惟一性索引、包含性列索引、索引视图、全文索引、一性索引、包含性列索引、索引视图、全文索引、XML索引等。在这些索引类型中,聚集索引和非聚集索引索引等。在这些索引类型中,聚集索引和非聚集索引是数据库引擎中索引的基本类型,是理解惟一性索引、是数据库引擎中索引的基本类型,是理解惟一性索引、包含性列索引、索引视图的基础,本节主要研究者两包含性列索引、索引视图的基础,本节主要研究者两种索引类型。种索引类型。l另外,为了更好地理解索引结构,有必要对堆结构有所了另外,为了更好地理解索引结构,有必要对堆结构有所了解。解。l最后,简单介绍一下系统访问
5、数据的方式。最后,简单介绍一下系统访问数据的方式。10/24/20225第5页,本讲稿共20页堆堆 l堆是不含聚集索引的表,表中的数据没有堆是不含聚集索引的表,表中的数据没有任何的顺序。堆的信息记录在任何的顺序。堆的信息记录在sys.partitions目录视图中。每一个堆都可目录视图中。每一个堆都可能有多个不同的分区,每一个分区都有一能有多个不同的分区,每一个分区都有一个堆结构,每一个分区在个堆结构,每一个分区在sys.partitions目目录视图中都有一行,且录视图中都有一行,且index_id=0。也就。也就是说,每一个堆都可能有多个堆结构。是说,每一个堆都可能有多个堆结构。10/24
6、/20226第6页,本讲稿共20页聚集索引聚集索引 l聚集索引是一种数据表的物理顺序与索引顺序相同的聚集索引是一种数据表的物理顺序与索引顺序相同的索引,非聚集索引则是一种数据表的物理顺序与索引索引,非聚集索引则是一种数据表的物理顺序与索引顺序不相同的索引。顺序不相同的索引。l聚集索引的叶级和非叶级构成了一个特殊类型的聚集索引的叶级和非叶级构成了一个特殊类型的B树树结构。结构。B树结构中的每一页称为一个索引节点。索引树结构中的每一页称为一个索引节点。索引的最低级节点是叶级节点。在一个聚集索引中,某个的最低级节点是叶级节点。在一个聚集索引中,某个表的数据页是叶级,在叶级之上的索引页是非叶级。表的数
7、据页是叶级,在叶级之上的索引页是非叶级。在聚集索引中,页的顺序是有序的。在聚集索引中,页的顺序是有序的。10/24/20227第7页,本讲稿共20页非聚集索引非聚集索引 l非聚集索引与聚集索引具有相同的非聚集索引与聚集索引具有相同的B树结构,但是,在非树结构,但是,在非聚集索引中,基础表的数据行不是按照非聚集键的顺序排聚集索引中,基础表的数据行不是按照非聚集键的顺序排序和存储,且非聚集索引的叶级是由索引页而不是由数据序和存储,且非聚集索引的叶级是由索引页而不是由数据页组成。页组成。l非聚集索引既可以定义在表或视图的聚集索引上,也非聚集索引既可以定义在表或视图的聚集索引上,也可以定义在表或视图的
8、堆上。非聚集索引中的每一个可以定义在表或视图的堆上。非聚集索引中的每一个索引行都是由非聚集键值和行定位符组成,该行定位索引行都是由非聚集键值和行定位符组成,该行定位符指向聚集索引或堆中包含该键值的数据行。如果表符指向聚集索引或堆中包含该键值的数据行。如果表或视图中没有聚集索引或视图中没有聚集索引(堆堆),则行定位符是指向行的,则行定位符是指向行的指针指针RID,RID由文件标识符由文件标识符ID、页码和页上的行数生、页码和页上的行数生成。成。10/24/20228第8页,本讲稿共20页其他类型的索引其他类型的索引 l除了聚集索引和非聚集索引之外,除了聚集索引和非聚集索引之外,Microsoft
9、 SQL Server 2005系统还提供了系统还提供了一些其他类型的索引或索引表现形式,这一些其他类型的索引或索引表现形式,这些内容包括些内容包括惟一性索引惟一性索引包含性列索引包含性列索引索引视图索引视图全文索引全文索引XML索引索引10/24/20229第9页,本讲稿共20页访问数据的方式访问数据的方式 l第一种方法是表扫描,就是指系统将指针第一种方法是表扫描,就是指系统将指针放在该表的表头数据所在的数据页上,然放在该表的表头数据所在的数据页上,然后按照数据页的排列顺序,一页一页地从后按照数据页的排列顺序,一页一页地从前向后扫描该表数据所占有的全部数据页,前向后扫描该表数据所占有的全部数
10、据页,直至扫描完表中的全部记录。直至扫描完表中的全部记录。l第二种方法是使用索引查找。第二种方法是使用索引查找。10/24/202210第10页,本讲稿共20页8.3 创建索引创建索引l在在Microsoft SQL Server 2005系统中,既系统中,既可以直接创建索引,也可以间接创建索引。可以直接创建索引,也可以间接创建索引。当直接创建索引时,既可以使用当直接创建索引时,既可以使用CREATE INDEX语句,也可以使用图形工具。语句,也可以使用图形工具。10/24/202211第11页,本讲稿共20页直接方法和间接方法直接方法和间接方法 l可以把创建索引的方式分为直接方法和间接方法。
11、可以把创建索引的方式分为直接方法和间接方法。l直接创建索引的方法就是使用命令和工具直接创建索引。直接创建索引的方法就是使用命令和工具直接创建索引。l间接创建索引就是通过创建其他对象而附加创建了索引,间接创建索引就是通过创建其他对象而附加创建了索引,例如在表中定义主键约束或惟一性约束时,同时也创建了例如在表中定义主键约束或惟一性约束时,同时也创建了索引。索引。l虽然,这两种方法都可以创建索引,但是,它们创建索引虽然,这两种方法都可以创建索引,但是,它们创建索引的具体内容是有区别的。的具体内容是有区别的。10/24/202212第12页,本讲稿共20页使用使用CREATE INDEX语句语句 l在
12、在Microsoft SQL Server 2005系统中,使系统中,使用用CREATE INDEX语句可以在关系表上创语句可以在关系表上创建索引建索引10/24/202213第13页,本讲稿共20页 数据库引擎优化顾问数据库引擎优化顾问 l使用使用Microsoft SQL Server 2005的数据库引擎优化顾问,的数据库引擎优化顾问,用户可以方便地选择和创建索引、索引视图和分区的最佳用户可以方便地选择和创建索引、索引视图和分区的最佳集合。数据库引擎优化顾问分析一个或多个数据库的工作集合。数据库引擎优化顾问分析一个或多个数据库的工作负荷和实现,其中工作负荷是对要优化的一个或多个数据负荷和
13、实现,其中工作负荷是对要优化的一个或多个数据库执行的一组库执行的一组Transact-SQL语句。数据库引擎优化顾语句。数据库引擎优化顾问的输入是由问的输入是由SQL Server Profiler生成的跟踪文件、指生成的跟踪文件、指定的跟踪表或工作负荷。数据库引擎优化顾问的输出是修定的跟踪表或工作负荷。数据库引擎优化顾问的输出是修改数据库的物理设计结构的建议,其中物理设计结构包括改数据库的物理设计结构的建议,其中物理设计结构包括聚集索引、非聚集索引、索引视图、分区等。聚集索引、非聚集索引、索引视图、分区等。10/24/202214第14页,本讲稿共20页查看索引信息查看索引信息 l在在Mic
14、rosoft SQL Server 2005系统中,可系统中,可以使用一些目录视图和系统函数查看有关以使用一些目录视图和系统函数查看有关索引的信息。索引的信息。l这些目录视图和系统函数如表这些目录视图和系统函数如表8-1所示。所示。10/24/202215第15页,本讲稿共20页8.4 索引维护索引维护l索引在创建之后,由于数据的增加、删除、索引在创建之后,由于数据的增加、删除、更新等操作使得索引页发生碎块,因此为更新等操作使得索引页发生碎块,因此为了提高系统的性能,必须对索引进行维护。了提高系统的性能,必须对索引进行维护。l这些维护包括查看碎块信息、维护统计信这些维护包括查看碎块信息、维护统
15、计信息、分析索引性能、删除重建索引等。息、分析索引性能、删除重建索引等。10/24/202216第16页,本讲稿共20页查看索引统计信息查看索引统计信息 l索引统计信息是查询优化器用来分析和评索引统计信息是查询优化器用来分析和评估查询、确定最优查询计划的基础数据。估查询、确定最优查询计划的基础数据。一般地,用户可以通过常用的方式访问指一般地,用户可以通过常用的方式访问指定索引的统计信息。定索引的统计信息。一种方式是使用一种方式是使用DBCC SHOW_STATISTICS命命令令另一种是使用图形化工具另一种是使用图形化工具10/24/202217第17页,本讲稿共20页查看索引碎片信息查看索引
16、碎片信息 l可以使用两种方式查看有关索引的碎片信可以使用两种方式查看有关索引的碎片信息,使用息,使用sys.dm_db_index_physical_stats系统函系统函数和使用图形化工具。注意,数和使用图形化工具。注意,sys.dm_db_index_physical_stats系统函系统函数替代了以前版本中的数替代了以前版本中的DBCC SHOWCONTIG命令。命令。10/24/202218第18页,本讲稿共20页维护索引统计信息维护索引统计信息l统计信息是存储在统计信息是存储在Microsoft SQL Server中的列数据中的列数据的样本。这些数据一般地用于索引列,但是还可以为的
17、样本。这些数据一般地用于索引列,但是还可以为非索引列创建统计。非索引列创建统计。Microsoft SQL Server维护某一个维护某一个索引关键值的分布统计信息,并且使用这些统计信息来索引关键值的分布统计信息,并且使用这些统计信息来确定在查询进程中哪一个索引是有用的。查询的优化依确定在查询进程中哪一个索引是有用的。查询的优化依赖于这些统计信息的分布准确度。查询优化器使用这些赖于这些统计信息的分布准确度。查询优化器使用这些数据样本来决定是使用表扫描还是使用索引。数据样本来决定是使用表扫描还是使用索引。l当表中数据发生变化时,当表中数据发生变化时,Microsoft SQL Server周期性
18、周期性地自动修改统计信息。索引统计被自动地修改,索引中地自动修改统计信息。索引统计被自动地修改,索引中的关键值显著变化。的关键值显著变化。10/24/202219第19页,本讲稿共20页8.5 查询优化查询优化l在很多情况下,为了达到同样的结果,可以写出多个不同的在很多情况下,为了达到同样的结果,可以写出多个不同的查询形式。但是,不同的查询形式往往消耗的时间不相同,查询形式。但是,不同的查询形式往往消耗的时间不相同,因此有不同的性能。如何提高查询语句的性能呢?下面,介因此有不同的性能。如何提高查询语句的性能呢?下面,介绍绍Microsoft SQL Server查询优化器和优化隐藏的特点。查询
19、优化器和优化隐藏的特点。l在查询语句中,在查询语句中,Microsoft SQL Server系统是如何判断是否使用系统是如何判断是否使用索引或使用哪些索引呢?一般地,系统是根据索引的选择性和索索引或使用哪些索引呢?一般地,系统是根据索引的选择性和索引类型。如果索引列的选择性很高,也就是说,索引列中的只有引类型。如果索引列的选择性很高,也就是说,索引列中的只有很少几行数据将被选中,那么应该使用索引。系统如何得到选择很少几行数据将被选中,那么应该使用索引。系统如何得到选择性呢?这就需要系统的统计信息来确定。下面,通过一个示例讲性呢?这就需要系统的统计信息来确定。下面,通过一个示例讲述系统是如何选择索引执行查询操作的。述系统是如何选择索引执行查询操作的。10/24/202220第20页,本讲稿共20页