聚集索引介绍
在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。
如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引有更快的数据访问速度。
聚集索引通常可加快 UPDATE 和 DELETE 操作的速度,因为这两个操作需要读取大量的数据。创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组。
可考虑将聚集索引用于:
1.包含数量有限的唯一值的列,如 state 列只包含 50 个唯一的州代码。
2.使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。
3. 返回大结果集的查询。
创建聚集索引
在数据库关系图中选择要创建索引的表,右击该表,然后从快捷菜单中选择"索引/键"命令。
-或-
为要创建索引的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"索引/键"命令。
创建新索引。有关详细信息,请参见创建索引。
若要修改现有索引,请从"选定的索引"列表中选择该索引。
选择"创建为 CLUSTERED"复选框。
当保存表或关系图时,索引即创建在数据库中。
非聚集索引介绍
非聚集索引与聚集索引一样有 B 树结构,但是有两个重大差别:
数据行不按非聚集索引键的顺序排序和存储。
非聚集索引的叶层不包含数据页。
相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。
非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在 Microsoft? SQL Server? 2000 中,非聚集索引中的行定位器有两种形式:
如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
如果表没有聚集索引,或者索引在索引视图上,则行定位器就是行的聚集索引键。如果聚集索引不是唯一的索引,SQL Server 2000 将添加在内部生成的值以使重复的键唯一。用户看不到这个值,它用于使非聚集索引内的键唯一。SQL Server 通过使用聚集索引键搜索聚集索引来检索数据行,而聚集索引键存储在非聚集索引的叶行内。
由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。