签到成功

知道了

CNDBA社区CNDBA社区

SQL Server 聚集索引和 非聚集索引 说明

2021-05-03 16:44 1331 0 原创 SQLServer
作者: dave

索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。http://www.cndba.cn/dave/article/4506

1 聚集索引

聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。 聚集索引的叶子页面和表的数据页面相同,因此表行物理上按照聚集索引列排序因为表数据只能有一种物理顺序,所以一个表只能有一个聚集索引。同时要注意,聚集索引键尺寸很大,聚集索引重建时需要重建所有的非聚集索引,开销很大。

只有当表包含聚集索引时,表中的数据行才按排序顺序存储。 如果表具有聚集索引,则该表称为聚集表。 如果表没有聚集索引,则其数据行存储在一个称为堆表的无序结构中。http://www.cndba.cn/dave/article/4506

首先创建聚集索引。在没有索引的表上决定索引类型时,聚集索引通常是首选,因为索引页面和数据页面相同,聚集索引不需要像非聚集索引那样从索引行跳到基本行。http://www.cndba.cn/dave/article/4506http://www.cndba.cn/dave/article/4506

创建聚集索引时建议保持窄索引,即列宽窄,比如采用int,或者宽度窄的字符型(char(4))。http://www.cndba.cn/dave/article/4506

建议使用聚集索引的情况:

http://www.cndba.cn/dave/article/4506
http://www.cndba.cn/dave/article/4506

检索一定范围的数据。
读取预先排序的数据。

2 非聚集索引

非聚集索引具有独立于数据行的结构。 非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。非聚集索引不影响表页面中数据的顺序,因为其叶子页面和表的数据页面是分离的,需要一个指针(行定位器)来从索引行导航到数据行。

http://www.cndba.cn/dave/article/4506

从非聚集索引中的索引行指向数据行的指针称为行定位器。 行定位器的结构取决于数据页是存储在堆中还是聚集表中。 对于堆表,行定位器是指向行的指针。 对于聚集表,行定位器是聚集索引键。

可以向非聚集索引的叶级添加非键列以跳过现有的索引键限制,并执行完整范围内的索引查询。

http://www.cndba.cn/dave/article/4506

建议使用非聚集索引的情况:http://www.cndba.cn/dave/article/4506

频繁更新的列。
宽的关键字。
太多并行的顺序插入。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2246
    原创
  • 3
    翻译
  • 554
    转载
  • 188
    评论
  • 访问:6917582次
  • 积分:4275
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ