建立与删除索引



索引的分类

 

索引一般分为聚簇索引和非聚簇索引两类。聚簇索引对数据进行物理的排序,非聚簇索引不对数据进行物理排序。

聚簇索引确定表中数据的物理顺序,即将数据按照索引列进行物理排序。类似于电话号码簿,姓氏就是聚簇索引列。

注意:

F  SQL Server数据库管理系统自动对具有PRIMARY KEY约束的列建立索引,而且如果此表没有聚簇索引的话,默认建立的是聚簇索引;

F  定义聚簇索引键时使用的列越少越好,这一点很重要,如果定义了一个大型的聚簇索引键,则同一个表上定义的任何非聚簇索引都将增大许多,因为非聚簇索引项将包含聚簇索引键。

在创建聚簇索引之前,应先了解数据时如何被访问的,可考虑将聚簇索引用于:

ü  包含大量非重复值的列

ü  使用运算符between>>=<<=返回一个范围值的查询

ü  被连续访问的列

ü  返回大型结果集的列

ü  经常被用作连接的列,一般来说,这些是外码列

ü  rorder by group by子句中指定的列进行索引,可以使数据库管理系统在查询时不必对数据再进行排序,因为这些数据在建立聚簇索引时已经被物理排序,因而可以提高查询性能。

聚簇索引不适用于:

û   频繁更改的列。因为这将导致整行移动。

û   字节长的列。因为聚簇索引的键值将被所有非聚簇索引作为查找键使用,并存储在每个非聚簇索引的B树的叶级索引项中。

非聚簇索引与图书的目录类似,其数据存储在一个地方,索引存储在另一个地方,索引带有指向数据的存储位置的指针。非聚簇索引可以在有聚簇索引的表和无聚簇索引的表上定义。一个表上可以建立多个非聚簇索引。

非聚簇索引与聚簇索引一样有B树结构,但是有两个重要差别:

Ø  数据行不按非聚簇索引键的顺序排序和存储

Ø  非聚簇索引的叶级部包含数据页

可考虑将非聚簇索引用于:

ü  包含大量非重复值的列。如果某列只有很少的非重复值,比如只有10,则不对这些列建立非聚簇索引。

ü  不返回大型结果集的查询。

ü  经常作为查询条件使用的列。

ü  经常作为连接和分组条件的列,应在这些列上创建多个非聚簇索引。

唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值的组合都是唯一的。实际上,当在表上创建         PRIMARY KEY约束或UNIQUE约束是,系统会自动在这些列上创建唯一索引。

 

创建和删除索引

 

①创建索引

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]

         INDEX 索引名 ON 表名 (列名 [ , n ] )

( create [ unique ] [ clustered | nonclustered ]

Ø  UNIQUE:表示要创建的索引是唯一索引。

Ø  CLUSTERED:表示要创建的索引是聚簇索引。

Ø  NONCLUSTERED:表示要创建的索引是非聚簇索引。

如果没有指定聚簇索引,则默认创建非聚簇索引。

 

②删除索引

DROP INDEX <索引名>