SQL Server 2012 中非聚集索引的用途

new*_*int 1 sql-server

(SQL Server 新手)我正在努力理解 SQL Server 中非聚集索引的用途。虽然阅读了 MS 文档(v2012 和 v2008 都有漂亮的图片)和一些在线资源,但仍然有很多悬而未决的问题。

  1. 是否非常规。索引维护排序的 B 树?据我了解,它确实 - http://technet.microsoft.com/en-us/library/aa933130%28v=sql.80%29.aspx,否则书籍索引的类比将没有任何意义。
  2. 你到底为什么想要 noncl。使用聚集索引或堆在表或视图上定义索引?堆没有顺序,所以定义 noncl。堆上的索引有一定的意义 - 您可以快速找到完全匹配的内容。但是,带有聚集索引的表已经是有组织的数据,并且定义了 noncl。index 只会加速精确搜索。

Bre*_*zar 6

你在这里有两个问题:

1. 非聚集索引是否有排序的 B 树?是的,因为您必须到达索引的正确页面才能找到您要查找的数据。

2. 当你也有聚集索引时,你为什么想要一个非聚集索引?将电话簿的白页视为您的聚集索引。如果您想查找您所在城市中名字为“Brent”的所有人,那么聚簇索引对您没有多大用处 - 聚簇索引基于姓氏、名字、中间名首字母。有一个按名字排序的单独电话簿不是很有帮助吗?

就像在现实生活中一样,答案可能是肯定的或否定的 - 但这取决于您按名字搜索人的频率,以及人们进出您所在城市的频率,或者人们更改名字的频率。