Slide Title,Body Text,Second level,Third level,Fourth level,Fifth level,创建和优化索引,SQL Server,访问数据的方式,表扫描,SQL Server,扫描表的所有页,索引,SQL Server,使用索引页找到行,没有聚集索引的表,不按特定顺序存储的页,堆,堆,IAM,页,数据页,id,index_id,=0,first_iam_page,sys.partitions,聚集索引,索引页叶节点,一张表只能有一个聚集索引,B-,树按索引键的顺序存储数据页,id,index_id,=1,root_page,sys.partitions,索引页中间级,根索引页,B,树参考下面的堆和聚集索引,每张表最多,249,个非聚集索引,非聚集索引,id,index_id,1,root_page,sys.partitions,数据页堆或者,聚集索引,索引页叶节点,根索引页,创建索引时遵循一般原则,在需要经常搜索的列上面创建索引,在主键上创建索引,在外键上创建索引,在经常用于,Where,子句的列上创建索引,在经常需要排序的列上创建索引,对于数据类型为,text,,,image,,,bit,的列不应该增加索引,当需要,Update,性能远高于,Select,性能时不应该增加索引,WITH,选项,目的,ALLOW_ROW_LOCKS,在索引上允许,/,不允许行级锁,ALLOW_PAGE_LOCKS,在索引上允许,/,不允许页级锁,ONLINE,在创建的时候允许,/,不允许访问索引,FILLFACTOR,控制在叶级页上释放空间,PAD_INDEX,控制在非叶级页上释放空间,CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX,index_name,ON,table,|,view,(,column,ASC|DESC ,.n )INCLUDE (,column,.n )WITH option ,.n ON,partition_scheme,(,column,)|,filegroup,|default ,CREATE INDEX,语句,惟一索引,确保在索引键上不存在相同的值,CREATE UNIQUE NONCLUSTERED INDEX AK_Employee_LoginID ON HumanResources.Employee(LoginID ASC),EmployeeID,LoginID,Gender,MaritalStatus,216,mike0,M,S,231,fukiko0,M,M,242,pat0,M,S,291,pat0,F,S,不允许存在相同值,创建多列索引,复合索引,最多可组合,16,个列以及键的长度不超过,900,字节,首先定义惟一性最高的列,包含性列,带包含性列的索引,提高查询“范围”,提高查询性能,CREATE NONCLUSTERED INDEX AK_Employee_LoginID ON HumanResources.Employee(LoginID ASC)INCLUDE(ContactID,NationalIDNumber),CREATE NONCLUSTERED INDEX K_Contact_LastName_FirstName ON Person.Contact(LastName ASC,FirstName ASC),非键列,可以是不允许作为索引键列的数据类型,在计算索引键列的数目或索引键大小时,不会被考虑在内,USE AdventureWorks;,GO,CREATE INDEX IX_Document_Title,ON Production.Document(Title,Revision),INCLUDE(FileName);,使用,Transact-SQL,创建具有包含性列的索引,对计算列创建索引的场合,在以下情况下,可对计算列创建索引:,计算列表达式是确定性的和精确的,ANSI_NULLS,连接级选项为,ON,求值结果不为,text,ntext,或者,image,数据类型的列,当创建索引和修改索引的时候要求的选项设置为,ON,NUMERIC_ROUNDABORT,选项设置为,OFF,查询优化器可能忽略计算列上的索引,2005,与分区表类似,根据值范围将索引进行水平分区,id,index_id,partition_number,hobt_id,1,2,1,67567567657,2,2,2,75675676665,sys.partitions,考虑下面表中的列以及考虑索引键中的分区键(唯一键),已分区索引,获得索引信息的方法,SQL Server Management Studio,对象资源管理器,索引“属性”窗口,报告,系统存储过程,sp_help,sp_helpindex,目录视图,系统函数,分析数据库工作负荷下的性能,图形化和命令行界面,数据库引擎优化顾问,报告和建议,工作负荷,数据库引擎,优化顾问,数据库和数据库对象,索引碎片,索引碎片发生,当数据被更改的时候,,SQL Server,重新整理索引页,对索引页进行拆分。,碎片类型,内部,页使用不充分,外部,页的逻辑顺序错误,检测碎片,SQL Server Management Studio,索引属性窗口,系统函数,sys.dm_db_index_physical_stats,索引碎片整理选项,30%,碎片,=,重新生成,ALTER INDEX AK_Product_Name ON Production.Product,REORGANIZE,ALTER INDEX AK_Product_Name ON Production.Product,REBUILD,