资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第15章 索引和查询优化,索引提供对数据的快速访问,用于减轻搜索数据库的压力。,SQL Server 2005,数据库提供了丰富的索引类型,以优化查询操作。本章就索引的创建与使用进行说明,并列举索引的常用维护操作,从而实现索引的优化。,15.1 索引概述,索引是与表或视图关联的磁盘上数据结构,它可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个称为,B,树的数据结构中,使,SQL Server,数据库可以快速有效地查找与键值相关联的行。,15.1.1 聚集索引和非聚集索引,SQL Server 2005,数据库的索引分为聚集索引和非聚集索引,其数据结构的组织形式不同,具体描述请参考如下说明。,聚集索引,聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。,非聚集索引,非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。,15.1.2 填充因子,提供填充因子选项是为了优化索引数据存储和性能。当创建或重新生成索引时,填充因子值可确定每个叶级页上要填充数据的空间百分比,以便保留一定百分比的可用空间供以后扩展索引。,15.1.3 使用目录视图查看索引,用户可以使用目录视图查看索引的相关信息,(具体内容请参照书。),15.2 用,CREATE INDEX,语句创建索引,本书第四章讲述了使用,SQL Server Management Studio,图形工具,如表设计器等创建索引的过程,本节,详细介绍使用,CREATE INDEX,语句创建索引的步骤,并列举示例进行说明。,15.2.1 基本语法,(具体内容请参照书。),15.2.2 创建简单的复合索引,示例:以下示例在15.2.1节建立的数据表的基础上,建立由,col1,和,col2,的多个字段构成的索引,具体操作可能参考如下步骤。,15.2.3 创建唯一索引,示例:以下示例在15.2.1节建立的数据表的基础上,使用,CREATE UNIQUE INDEX,建立唯一索引,具体操作可能参考如下步骤。(具体内容请参照书。),15.2.4 创建聚集索引,每个表都应该有聚集索引,聚集索引可以按需重新生成或重新组织来控制表的物理碎片。聚集索引一般按主键约束和,UNIQUE,约束的方式实现。,在创建主键约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。主键列不允许空值。在创建,UNIQUE,约束时,默认情况下将创建唯一非聚集索引,以便强制,UNIQUE,约束。如果不存在该表的聚集索引,则可以指定唯一聚集索引。,15.2.5 指定索引存放的文件组,用户也可以指定将索引存放的位置,这样有助管理存储的物理策略。(具体内容请参照书。),15.3 用,ALTER INDEX,语句修改索引,使用,ALTER INDEX,,通过禁用、重新生成或重新组织索引,或通过设置索引的相关选项,修改现有的表索引或视图索引。本节将介绍,ALATER INDEX,的语法,并根据使用示例说明。,15.3.1 基本语法,使用,ALTER INDEX,创建索引的语法结构如下所示。(具体内容请参照书。),15.3.2 设置索引的选项,(具体内容请参照书。),15.3.3 禁用/启用索引,和约束一样,在进行一些操作的时候,用户可能希望禁用和启用索引操作。禁用索引可防止用户访问该索引,对于聚集索引,还可防止用户访问基础表数据。(具体内容请参照书。),15.4 用,DROP INDEX,语句删除索引,删除非聚集索引时,将从元数据中删除索引定义,并从数据库文件中删除索引数据页。删除聚集索引时,将从元数据中删除索引定义,并且存储于聚集索引叶级别的数据行将存储到生成的未排序表中。将重新获得以前由索引占有的所有空间。,15.4.1 基本语法,本节讲述使用,DROP INDEX,删除索引的功能。(具体内容请参照书。),15.4.2 使用,DROP INDEX,删除聚集索引并将表移动到新文件组,以下示例使用,MOVE TO,子句联机删除一个聚集索引,并将生成表移动到文件组,GROUP2。,在移动之前和之后,将查询,sys.indexes、sys.tables,和,sys.,filegroups,目录视图,以验证索引和表在文件组中的位置。(具体内容请参照书。),15.4.3 使用,DROP INDEX,删除,PRIMARY KEY,约束,在已经创建了,PRIMARY KEY,或,UNIQUE,约束的数据库中,创建的索引不能使用,DROP INDEX,来删除,可以使用,ALTER TABLE DROP CONSTRAINT,语句删除该约束。,15.5 重新组织和重新生成索引,索引由于数据的添加、删除、修改等操作,会产生碎片,这样的状态将影响数据表的操作效率,,SQL Server 2005,数据库提供了重新生成索引的方式,本节讨论重新构建索引。,15.5.1 理解重新组织、生成索引,无论何时对基础数据执行插入、更新或删除操作,,SQL Server 2005,数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中。当索引包含的页中的逻辑排序与数据文件中的物理排序不匹配时,就存在碎片。碎片非常多的索引可能会降低查询性能,导致应用程序响应缓慢。在,SQL Server 2005,数据库中,用户可以通过重新组织索引或重新生成索引来修复索引碎片。,15.5.2 重新组织索引,重新组织索引是通过对叶页进行物理重新排序,使其与叶节点的逻辑顺序相匹配,从而对表或视图的聚集索引和非聚集索引的叶级别进行碎片整理,使页有序可以提高索引扫描的性能。,15.5.3 重新生成索引,重新生成索引将删除该索引并创建一个新索引。此过程中将删除碎片,通过使用指定的或现有的填充因子设置压缩页来回收磁盘空间,并在连续页中对索引行重新排序。这样可以减少获取所请求数据所需的页读取数,从而提高磁盘性能。,
展开阅读全文