数据库原理与应用教程―SQL Server 2019 课件 第10章视图与索引.ppt
那么,按部首查字就要两个步骤:先找到部首查字法即“偏旁部首”索引目录中的结果,然后再翻到所需要的页码。这种目录纯粹是目录,正文纯粹是正文的排序方式就称为“非聚集索引”。在表或视图中,最多可以建立250个非聚集索引,或者249个非聚集索引和1个聚集索引。注*:SQLServer中不管聚集还是非聚集索引都采用B+树的存储结构。10.2.2索引类型B-树实例图10.2.2索引类型B+树实例图马龙郑晓娟康刘马龙齐菲郑晓娟蔡红范小丽马龙宋张郑晓娟宁潘齐菲戴邓范小丽安白蔡红假定此B+树为按学生姓名创建的非聚集索引,下面的指针指向学生表中相应的学生信息。10.2.2索引类型10.2索引10.2.3创建索引注意:创建时,哪些列适合创建索引,哪些列不适合创建索引,需要进行详细的考察。1.创建索引时应考虑的问题*(1)对一个表中建大量的索引,应进行权衡**。对于SELECT查询,大量索引可以提高性能,可以从中选择最快的查询方法;但是,会影响INSERT、UPDATE和DELETE语句的性能,因为对表中的数据进行修改时,索引也要动态的维护,所以应避免对经常更新的表建立过多的索引,而对更新少而且数据量大的表创建多个索引,可以大大提高查询性能。10.2.3创建索引(2)对于小型表(行数较少)进行索引可能不会产生优化效果。(3)对于主键和外键列应考虑建索引,因为经常通过主键查询数据,而外键用于表间的连接。(4)很少在查询中使用的列以及值很少的列不应考虑建索引。(5)视图中如果包含聚合函数或连接时,创建视图的索引可以显著提升查询性能。2.通过SQLServerManagementStudio,使用向导创建索引是一种图形界面环境下最快捷的创建方式3.利用T-SQL语句创建索引基本语法格式:CREATE[UNIQUE][CLUSTERED|NONCLUSTERED(默认)]INDEXindex_name?ON{table_name|view_name}(column[ASC|DESC][,...n])10.2.3创建索引[例10-9]根据教学库中学生表的姓名列的升序创建一个名为index_sname的普通索引。CREATEINDEXindex_snameONstudent(sname)GO分析受益的语句:如:Select*fromstudentwheresname=‘张强’再如:updatestudentsetspecialty=‘网络工程’wheresname=‘张强’10.2.3创建索引【例10-10】根据teaching库中student表的专业、年级创建一个名为specialty_grade的复合索引,其中专业称为升序,年级为降序。USEteachingGOCREATEINDEXspecialty_gradeONstudent(specialtyASC,gradeDESC)10.2.3创建索引4.间接创建索引在定义表结构或修改表结构时,如果定义了主键约束(PRAMARYKEY)或者唯一性约束(UNIQUE),可以间接创建索引。[例10-11]创建一个s3表,并定义了主键约束。USEteachingGOCREATETABLEs3(snochar(6)PRIMARYKEY,snamechar(8))此例中,就按sno升序创建了一个聚集索引。10.2.3创建索引[例10-12]创建一个教师表,并定义了主键约束和唯一性约束。USEteachingGOCREATETABLEteacher(tnochar(6)PRIMARYKEY,tnamechar(8)UNIQUE)此例中,创建了两个索引,按tno升序创建了一个聚集索引,按tname升序创建了一个非聚集唯一索引。10.2.3创建索引5.创建视图的索引【例10-13】创建一个female_view女生视图,并为该视图按sno升序创建一个具有唯一性的聚集索引。创建视图:USEteachingGOCREATEVIEWfemale_viewWITHSCHEMABINDINGASSELECTsno,sname,ssex,specialtyFROMdbo.studentWHEREssex=女10.2.3创建索引T-SQL语句创建索引:CRE