1、第7章 索引,索引概述,索引包含由表或视图中的一列或多列生成的键 ,以及映射到指定数据的存储位置的指针。,(1)聚集索引(2)非聚集索引(3)唯一索引,聚集索引确定表中数据的物理顺序。聚集索引中键值的逻辑顺序决定了表中相应行的物理顺序。一个表只能包含一个聚集索引,非聚集索引不改变行的物理存储顺序,每个表可以建立多个非聚集索引,每个非聚集索引提供访问数据的不同排序顺序。,唯一索引要求所有数据行中任意两行的被索引列不能存在重复值。唯一索引既可以是聚集索引,也可以是非聚集索引,创建索引SQL语句,语法格式:,CREATE UNIQUECLUSTERED|NONCLUSTEREDINDEX index
2、_nameON table_or_view_name (columnASC|DESC,.);,创建索引唯一索引,在CREATE TABLE或ALTER TABLE语句中设置列级或表级的PRIMARY KEY约束或UNIQUE约束时,会自动为这些约束创建唯一索引。在创建PRIMARY KEY约束时,将自动创建唯一聚集索引。在创建UNIQUE约束时,默认情况将创建唯一非聚集索引。,管理索引查看索引,sp_helpindex name name是当前数据库中表或视图的名称。,管理索引重命名索引,Sp_rename object_name ,new_name , object_type,注意: 1、O
3、bject_type可以是column、index。 2、如果是重命名列或索引,则object_name的格式必须是表名.列名或表名.索引名。,管理索引删除索引,DROP INDEX table.index_name 或者 DROP INDEX index_name ON table_name,注意:drop index命令不能删除有create table或alter table命令创建的primary key或unique约束索引,全 文 索 引,SQL Server 2005全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。全文查
4、询利用这些信息,可以快速搜索包含具体某个词或一组词的行。,全文索引概述,创建全文索引的准备工作启用全文索引,在MS SQL SERVER 2005里,全文索引是一个单独的服务项,默认是启动的,但是没有允许数据库启用全文索引,如果要在某个数据库中创建全文索引,先要启用数据库的全文索引. 启用方法:数据库-属性-文件-使用全文索引,创建全文索引的准备工作启用全文目录,在创建全文索引过程中需要创建新的全文目录或选择已经存在的全文目录。创建、删除全文目录的方法:,创建全文索引的准备工作创建全文目录,在创建全文索引过程中需要创建新的全文目录或选择已经存在的全文目录。创建、删除全文目录的方法:,创建全文索
5、引的准备工作创建全文目录,创建全文索引的准备工作为表创建唯一索引,注:全文检索要求唯一索引,故需要在相关表建立唯一索引,全文索引包含在全文目录中。 每个数据库可以包含一个或多个全文目录,每个全文目录可以包含一个或多个表的全文索引。 一个表只能有一个全文索引。 全文索引必须在基表上定义,而不能在视图、系统表或临时表上定义。,注意,使用SSMS创建全文索引,例:在“SQL Server Management Studio”中利用“全文索引向导”在表teacher上建立基于tname列的全文索引。(P169-P173),使用全文索引,主要使用CONTAINS进行查询,例:基于全文索引查找姓“刘”和姓
6、“王”的教师信息。,select * from teacher where contains (tname,“刘“or“王“),使用SSMS启用、禁用、删除全文索引,使用T-SQL创建全文索引,1) 建立全文目录 (sp_fulltext_catalog) 2) 在全文目录中注册需要全文索引的表 (sp_fulltext_table) 3) 指出表中需要全文索引的列名 (sp_fulltext_column) 4) 激活表的全文检索能力 (sp_fulltext_table) 5) 填充全文目录 (sp_fulltext_catalog),使用T-SQL创建全文索引,例:在表teacher上建
7、立基于tname列的全文索引。,1.创建全文目录 exec Sp_fulltext_catalog ft_teacher, create 2.在全文目录中注册需要全文索引的表 (表名,创建删除,全文目录名,约束名) exec Sp_fulltext_table teacher,create,ft_teacher,pk_teacher 3.指出表中需要全文索引的列名 (表名,列名,添加删除) exec sp_fulltext_column teacher,tname,add exec sp_fulltext_column teacher,tsex,add,使用T-SQL创建全文索引,例:在表te
8、acher上建立基于tname列的全文索引。,4.激活表的全文检索能力 (sp_fulltext_table)exec sp_fulltext_table teacher,activate 5.填充全文目录 (sp_fulltext_catalog) exec sp_fulltext_catalog FT_teacher,start_full,普通索引练习:,使用SSMS完成以下练习: (1)在Users表的u_Name列上创建非聚集索引idx_UsersName。(2)在OrderDetails表的o_ID列和g_ID列上创建复合非聚集索引idx_OID_GID。 (3)查看所建索引idx_
9、UsersName和idx_OID_GID的基本信息。(4)删除所建的索引idx_UsersName和idx_OID_GID。 使用T-SQL完成以下练习: (5)在Employees表中创建基于e_Name列的非聚集索引idx_EName。 (6)在Orders表中创建基于e_ID列的非聚集索引idx_EID。,全文索引练习: (1)使用“全文索引向导”在Goods表中创建基于g_Name(唯一约束)的全文索引,全文目录名为ft_Goods,将c_Name、c_Price和c_Number列添加到该全文索引。 (2)基于Goods的全文索引查询商品名称为“三星”的商品详细信息。 (3)删除Goods表中所创建的全文索引。 (4)使用T-SQL完成上面的三个小题。,