SQL Server索引——《SQL Server2008查询性能优化》笔记
SQL Server在没有聚簇索引的情况下查找数据,只能对表进行逐行遍历以返回满足条件的行,这一过程被称为扫描。在有索引的表可以进行查找数据而不用扫描整张表。没有聚簇索引的表被称为堆,数据无序存放。当表存在聚簇索引时,数据按序存放,非聚簇索引的行定位器指向聚簇索引键,若是堆表则行定位是指向行ID。 样表: RowID(不是实际列) C1 C2 C3 1 A1 A2 A3 2 B1 B2 B3 没有聚簇索引情况下的非聚簇索引页面:C1上有一非聚簇索引 C1 行定位器 A1 指向RID=1的指针 B1 指向RID=2的指针 在列C2上创建一个聚簇索引后,非聚簇索引的行定位器发生了变化: C1 行定位器 A1 A2 B1 B2 一、索引开销 有索引的表需要更多空间来存储索引页面,数据的insert,update,delete等操作需要更长的处理时间来维护不断变化的索引。比如在表中增加一行数据,就要在相应的索引中增加一条记录。如果是聚簇索引,开销更大,因为行必须以正确的顺序添加到数据页面,这可能使其他数据行被重新定位。 下面创建一张数据表测试数据操作中索引开销: if(select OBJECT_ID('t1')) is not nulldrop table t1;gocreate table dbo.t1(c1 int,c2 int,c3 char(50))select top