目录
(2)利用Transact-SQL语句中的CREATE INDEX命令创建索引
一、创建索引
1.创建索引的方法
(1)利用企业管理器或对象资源管理器直接创建索引
其具体步骤如下:
① 在企业管理器中,展开指定的服务器和数据库,选择要 创建索引的表,用右键单击该表,从弹出的快捷菜单中选择所 有任务项的管理索引选项,就会出现管理索引对话框,在该对 话框中,可以选择要处理的数据库和表 。
②单击“新建”按钮,则出现新建索引对话框。
③ 选择完成后单击“确定”按钮,即可生成新的索引;单击 “取消”按钮,则取消新建索引的操作。
(2)利用Transact-SQL语句中的CREATE INDEX命令创建索引
语法格式:
CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED ]
INDEX 索引名
ON 数据表名|视图名( 字段名 [ ASC | DESC ] [ ,...n ] )
[WITH
[PAD_INDEX]
[[,]FILLFACTOR=填充因子]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]]
[ ON 文件组名]
参数说明:
(1)UNIQUE:用于指定为表或视图创建唯一索引,即不允许存在索引值相同的两行
(2)CLUSTERED:用于指定创建的索引为聚集索引。
(3)NONCLUSTERED:用于指定创建的索引为非聚集索引。
(4)ASC|DESC:用于指定具体某个索引列的升序或降序排序方向。
(5)PAD_INDEX:用于指定索引中间级中每个页(节点)上保持开放的空间。必须和填充因子同时使用。
(6)FILLFACTOR =填充因子:用于指定在创建索引时,每个索引页的数据占索引页大小的百分比,fillfactor的值为1到100。
(7)IGNORE_DUP_KEY:用于控制当往包含于一个唯一聚集索引中的列中插入重复数据时SQL Server所作的反应。当使用该选项,表示当插入或更新记录时,忽略重复键值。 (8)DROP_EXISTING:用于指定应删除并重新创建已命名的先前存在的聚集索引或者非聚集索引。
(9)STATISTICS_NORECOMPUTE:用于指定过期的索引统计不会自动重新计算。
(10)SORT_IN_TEMPDB:用于指定创建索引时的中间排序结果将存储在 tempdb 数据库中。
【例6】为数据库“教学管理”中的学生数据表关于“学生表.学号”建立聚集索引,关于“学生表.姓名”建立非聚集索引。
操作步骤如下:
① 在对象资源管理器中,展开“教学管理”数据库,选择学生表结点并单击右键,在快捷菜单中选择“修改”。
② 在设计器窗口中单击右键,在快捷菜单中选择“索引/键”,则出现新建索引对话框。
③ 单击“添加”按钮,系统自动给出新索引名(可以在“标识”里重新命名),然后在“常规”中选择要索引的列“姓名”。
④ 单击“关闭”按纽,索引创建完毕。
利用SQL中的CREATE INDEX命令创建索引
USE 教学管理
GO
CREATE UNIQUE CLUSTERED INDEX IX_学号
ON 学生表(学号)
WITH(pad_index,fillfactor=100)
上述命令关于“学生表.学号”建立了升序唯一性聚集索引,索引名为IX_学号,填充因子为100。
因为学生表已经有聚集索引,则会出现下列错误信息:
服务器:消息1902,级别16,状态3,行 1 不能在表“学生表”上创建多个聚集索引。
请在创建新聚集索引前除去现有的聚集索引 “PK_学生表”。
【例】为数据库“教学管理”中的数据表关于“课程表.课名”降序建立唯一索引IX_课程表_课名。
USE 教学管理
GO
CREATE UNIQUE INDEX IX_课程表_课名
ON 课程表(课名 DESC)
【例】为数据库“教学管理”中的数据表关于“教师表.姓名”升序建立非聚集和非唯一索引IX_教师表_姓名。
USE 教学管理
GO
CREATE INDEX IX_教师表_姓名
ON 教师表 (姓名 ASC)
【例】为数据库“教学管理”中的数据表关于“选课表.学号”降序、“选课表.开课号”升序建立组合唯一索引IX_学号_开课号,填充因子为90,在插入数据时,可以忽略重复的值。如果已经存在IX_学号_开课号索引,则先删除后重建。
USE 教学管理
GO
CREATE UNIQUE INDEX IX_学号_开课号
ON 选课表(学号 DESC,开课号 ASC)
WITH( PAD_INDEX=ON, --保持索引开放的空间
FILLFACTOR=90, --填充因子90
IGNORE_DUP_KEY=ON, --忽略重复键值
DROP_EXISTING=ON) --如果存在索引则删除
【例】为数据库“教学管理”中的数据表关于“选课表.成绩”降序建立非聚集索引IX_选课表_成绩。
USE 教学管理
GO
IF EXISTS (SELECT name FROM sysindexes WHERE name=‘IX_选课表_成绩’)
DROP INDEX 选课表.IX_选课表_成绩
CREATE NONCLUSTERED INDEX IX_选课表_成绩
ON 选课表(成绩 DESC)
二、删除索引
1、删除索引的方法
SQL Server 2000删除索引的主要方法有:利用企业管理器删除索引;利用SQL语句中的DROP INDEX命令删除索引。
(1)利用企业管理器删除索引
其具体步骤如下:
① 在企业管理器中,展开指定的服务器和数据库,选择要删除索引的表,用右键单击该表,从弹出的快捷菜单中选择所有任务项的管理索引选项,就会出现管理索引对话框,在该对话框中,可以选择要处理的数据库和表 。
② 选择要删除的索引,单击“删除”按钮。
(2)利用SQL中的DROP INDEX命令删除索引
其语法形式如下:
DROP INDEX 索引名[,…n]
2、删除索引实例分析
方法一:使用企业管理器
① 在企业管理器中,展开“教学管理”数据库,选择数据表enrollment节点单击右键,在快捷菜单中选择“设计表”。
② 在设计器窗口中单击右键,在快捷菜单中选择“所有任务”→“管理索引。
③ 在管理索引窗口,选定的索引列表中选择要删除的索引IN_grade,单击【删除】按纽,出现确定对话框,再单击【是】按纽完成索引的删除工作。
方法二:使用SQL命令
USE 教学管理
GO
DROP INDEX 选课表.IX_选课表_成绩