文档介绍:第6章索引与数据完整性
索引
索引
索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表。
在数据库系统中建立索引主要有以下作用:
快速存取数据;
保证数据记录的唯一性;
实现表与表之间的参照完整性;
在使用ORDER BY、GROUP BY子句进行数据检索时,利用索引可以减少排序和分组的时间。
索引的创建
在XSCJ数据库中,经常要对XS、KC、XS_KC三个表查询和更新,为了提高查询和更新速度,可以考虑对三个表建立如下索引:
对于XS表,按学号建立主键索引(PRIMARY KEY约束),索引组织方式为聚集索引;
对于XS表,按姓名建立唯一索引(UNIQUE约束),索引组织方式为非聚集索引;
对于KC表,按课程号建立主键索引或者唯一索引,索引组织方式为聚集索引;
对于XS_KC表,按学号+课程号建立唯一索引,索引组织方式为聚集索引。
在SQL Server 2000中,可利用企业管理器创建上述索引,也可以利用SQL命令,通过查询分析器建立索引。
下面以XS表中按学号建立索引为例,介绍索引的创建方法。
通过企业管理器建立索引
第1步进入企业管理器,打开XSCJ数据库;
索引的创建
第2步选择选择XS表的图标,右击,,选择“设计表”菜单项,;
索引的创建
第3步在XS表设计器界面上右击, ,快捷菜单中选择“索引/键”菜单项,;
索引的创建
第4步在“索引/键”属性页选择“新建”命令,然后,确定新索引的名称(用系统缺省的名或重新取名);在“列名”下选择要创建索引的列,在此选择“学号”这一列,最多可选择16 列。
索引的创建
语法格式:
CREATE [ UNIQUE ] /*是否为唯一索引*/
[ CLUSTERED | NONCLUSTERED ] /*索引的组织方式*/
INDEX index_name /*索引名称*/
    ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) /*索引定义的依据*/
[ WITH < index_option > [ ,...n] ] /*索引选项*/
[ ON filegroup ] /*指定索引文件所在的文件组*/
 
< index_option > ::=
  { PAD_INDEX
| FILLFACTOR = fillfactor
| IGNORE_DUP_KEY
| DROP_EXISTING
| PUTE
| SORT_IN_TEMPDB 
}
索引的创建
【】为KC 表的课程名列创建索引。
/*使用简单索引*/
USE XSCJ
IF EXISTS (SELECT name FROM sysindexes WHERE name = ' kc_name_ind ')
DROP INDEX KC. kc_name_ind
GO
CREATE INDEX kc_name_ind ON KC (课程名)
GO
【】根据KC表的课程号列创建唯一聚集索引,因为指定了 CLUSTERED 子句,所以该索引将对磁盘上的数据进行物理排序。
/*使用唯一聚集索引*/
USE XSCJ
IF EXISTS (SELECT name FROM sysindexes WHERE name = 'kc_id_ind')
DROP INDEX KC. kc_id_ind
GO
CREATE UNIQUE CLUSTERED INDEX kc_id_ind ON KC (课程号)
GO
索引的创建
【】根据XS_KC表的学号列和课程号列创建复合索引。
/*使用简单组合索引*/
USE XSCJ
IF EXISTS (SELECT name FROM sysindexes WHERE name = 'xs_kc_ind')
DROP INDEX xs_kc_ind
GO
CREATE INDEX xs_kc_ind ON XS_KC (学号, 课程号)
GO
【】根据XS表中的总学分列创建索引,例中使用了FILLFACTOR 子句。
USE XSCJ
IF EXISTS (SELECT name FROM sysindexes WHERE name = 'score_ind')
DROP INDEX score_ind
GO
CREATE NONCLUSTER