聚集索引
一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。
1.聚集索引可以创建在任何的字段上。但是很多情况下,是创建在主键上,而主键是唯一的。所以,很多人认为聚集索引的约束是唯一性的。
2.如果未使用UNIQUE属性创建聚集索引,数据库引擎将向表自动添加一个uniqueifier列。必要时,数据库引擎将向行自动添加一个uniqueifier值,使每一个键唯一。此列和列值供内部使用,用户不能查看或访问。
3.很多情况下,聚集索引比非聚集索引性能更优。当返回的列很少时,可以在返回的列创建联合非聚集索引,比其中一列创建聚集索引性能更优。
非聚集索引
一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
何时使用聚集索引或非聚集索引
动作描述 使用聚集索引 使用非聚集索引
列经常被分组排序 应 应
返回某范围内的数据 应 不应
一个或极少不同值 不应 不应
小数目的不同值 应 不应
大数目的不同值 不应 应
频繁更新的列 不应 应
外键列 应 应
主键列 应 应
频繁修改索引列 不应 应
两者的区别:
1.聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。
2.聚集索引存储记录是物理连续,而非聚集索引是逻辑连续,物理存储并不连续。
3.(索引是通过二叉树的形式进行描述的)聚集索引是叶节点是最终的数据节点,而非聚集索引的叶节点仍然是索引节点,但它有一个指向最终数据的指针。
4.聚集索引,遍历所有数据节点,而非聚集索引只要遍历所有的索引页。所以这是主键上创建非聚集索引比主键上创建聚集索引在插入数据时要快