在已创建聚簇索引的表上创建的非聚簇索引,与在未创建聚簇索引的表上创建的非聚簇索引,结构上有何区别?
简单说一下吧。
先说堆表:当堆表创建聚集索引后,整个表存储数据的数据页就按聚集索引键列有序的结构化成一棵平衡树,这样就可以按聚集索引快速查找出某一整行数据。如果有非聚集索引,非聚集索引本身也是一棵树,此时非聚集索引子叶存储的就不是rid了,而是聚集索引的键列(如果聚集索引有3列,非聚集索引都包括这3列)。当按非聚集索引查找数据时,如果没有在非聚集索引全部查找到所有要查询的列,则通过非聚集索引内部的聚集索引列再从聚集索引树查找,所以此时看执行计划,就会有多一个键查找。
定义聚集索引键时使用的列越少越好,这一点很重要。如果定义了一个大型的聚集索引键,则同一个表上定义的任何非聚集索引都将增大许多,因为非聚集索引条目包含聚集键。