索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。
1 聚集索引
聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。 聚集索引的叶子页面和表的数据页面相同,因此表行物理上按照聚集索引列排序因为表数据只能有一种物理顺序,所以一个表只能有一个聚集索引。同时要注意,聚集索引键尺寸很大,聚集索引重建时需要重建所有的非聚集索引,开销很大。
只有当表包含聚集索引时,表中的数据行才按排序顺序存储。 如果表具有聚集索引,则该表称为聚集表。 如果表没有聚集索引,则其数据行存储在一个称为堆表的无序结构中。
首先创建聚集索引。在没有索引的表上决定索引类型时,聚集索引通常是首选,因为索引页面和数据页面相同,聚集索引不需要像非聚集索引那样从索引行跳到基本行。
创建聚集索引时建议保持窄索引,即列宽窄,比如采用int,或者宽度窄的字符型(char(4))。
建议使用聚集索引的情况:
检索一定范围的数据。
读取预先排序的数据。
2 非聚集索引
非聚集索引具有独立于数据行的结构。 非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。非聚集索引不影响表页面中数据的顺序,因为其叶子页面和表的数据页面是分离的,需要一个指针(行定位器)来从索引行导航到数据行。
从非聚集索引中的索引行指向数据行的指针称为行定位器。 行定位器的结构取决于数据页是存储在堆中还是聚集表中。 对于堆表,行定位器是指向行的指针。 对于聚集表,行定位器是聚集索引键。
可以向非聚集索引的叶级添加非键列以跳过现有的索引键限制,并执行完整范围内的索引查询。
建议使用非聚集索引的情况:
频繁更新的列。
宽的关键字。
太多并行的顺序插入。
版权声明:本文为博主原创文章,未经博主允许不得转载。