索引一般分为聚簇索引和非聚簇索引两类。聚簇索引对数据进行物理的排序,非聚簇索引不对数据进行物理排序。
①聚簇索引确定表中数据的物理顺序,即将数据按照索引列进行物理排序。类似于电话号码簿,姓氏就是聚簇索引列。
注意:
F SQL Server数据库管理系统自动对具有PRIMARY KEY约束的列建立索引,而且如果此表没有聚簇索引的话,默认建立的是聚簇索引;
F 定义聚簇索引键时使用的列越少越好,这一点很重要,如果定义了一个大型的聚簇索引键,则同一个表上定义的任何非聚簇索引都将增大许多,因为非聚簇索引项将包含聚簇索引键。
在创建聚簇索引之前,应先了解数据时如何被访问的,可考虑将聚簇索引用于:
ü 包含大量非重复值的列
ü 使用运算符between、>、>=、<和<=返回一个范围值的查询
ü 被连续访问的列
ü 返回大型结果集的列
ü 经常被用作连接的列,一般来说,这些是外码列
ü 对rorder by 或group by子句中指定的列进行索引,可以使数据库管理系统在查询时不必对数据再进行排序,因为这些数据在建立聚簇索引时已经被物理排序,因而可以提高查询性能。
聚簇索引不适用于:
û 频繁更改的列。因为这将导致整行移动。
û 字节长的列。因为聚簇索引的键值将被所有非聚簇索引作为查找键使用,并存储在每个非聚簇索引的B树的叶级索引项中。
②非聚簇索引与图书的目录类似,其数据存储在一个地方,索引存储在另一个地方,索引带有指向数据的存储位置的指针。非聚簇索引可以在有聚簇索引的表和无聚簇索引的表上定义。一个表上可以建立多个非聚簇索引。
非聚簇索引与聚簇索引一样有B树结构,但是有两个重要差别:
Ø 数据行不按非聚簇索引键的顺序排序和存储
Ø 非聚簇索引的叶级部包含数据页
可考虑将非聚簇索引用于:
ü 包含大量非重复值的列。如果某列只有很少的非重复值,比如只有1和0,则不对这些列建立非聚簇索引。
ü 不返回大型结果集的查询。
ü 经常作为查询条件使用的列。
ü 经常作为连接和分组条件的列,应在这些列上创建多个非聚簇索引。
③唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值的组合都是唯一的。实际上,当在表上创建 PRIMARY KEY约束或UNIQUE约束是,系统会自动在这些列上创建唯一索引。
①创建索引
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]
INDEX 索引名 ON 表名 (列名 [ , … n ] )
( create [ unique ] [ clustered | nonclustered ]
Ø UNIQUE:表示要创建的索引是唯一索引。
Ø CLUSTERED:表示要创建的索引是聚簇索引。
Ø NONCLUSTERED:表示要创建的索引是非聚簇索引。
如果没有指定聚簇索引,则默认创建非聚簇索引。
②删除索引
DROP INDEX <索引名>