当前位置:  开发笔记 > 数据库 > 正文

SQL Server中的非聚簇索引 - 选择性 - 以及叶节点页面中的内容?

如何解决《SQLServer中的非聚簇索引-选择性-以及叶节点页面中的内容?》经验,为你挑选了1个好方法。

我有两个关于SQL Server中非聚集索引的问题,我似乎无法找到答案:

    他们说你应该只在具有高(例如95%)选择性(值的唯一性)的列上放置非聚集索引.例如,我的MailingAddress表有一个StateID列,它是一个外键列,其值是State表的主键值(我们在美国).MailingAddress表中将有大量记录,这些记录将具有此StateID列的重复值.例如,加利福尼亚州,纽约州,德克萨斯州等将存在许多地址.因此,StateID列的选择性将远低于95%.是否应将非聚集索引放在此StateID列上?

    据我所知,聚簇索引的最终叶子节点页面实际上包含数据记录本身.

但是,非聚集索引的叶节点页面到底是什么?是吗:

    实际记录所在的聚集索引值?(然后SQL Server将不得不通过聚集索引来获取您正在寻找的实际记录)?

    AND - - 列(s)表示,非聚集索引上的实际值,其中实际记录所在的聚集索引值的值(所以SQL Server可以去看看这个记录的其他列的值那不是非聚集索引的一部分)?

    还有别的.

提前感谢您的回答.



1> Remus Rusanu..:

是否应将非聚集索引放在此StateID列上?

不可以.但是,包含列的非聚集索引为目标查询创建覆盖索引非常有意义.

但是,非聚集索引的叶节点页面到底是什么?

数据记录.这是一个普通记录,类似于聚集索引数据记录.它包含以下列(顺序无关紧要):

非聚集索引键列

聚集索引键列

所有包含的列.

如果列在非聚集索引(键或包含)和聚簇索引键中都重复,则仅包含一次(即不重复).有些人将此解释为"非聚集索引中缺少聚簇索引的所有关键列",但我发现更难理解.

如果表没有聚集索引(即是一个),那么该记录包含:

非聚集索引的所有键列

所有包含的列

堆记录的记录定位符(row id =(fileid:pageid:slotid)).

此解释省略了不同的columnstore和Hekaton索引和表.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有