[转帖]SQL Server 聚集索引和 非聚集索引 说明

sql,server,聚集,索引,说明 · 浏览次数 : 0

小编点评

**聚集索引** * 是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 * 索引包含由表或视图中的一列或多列生成的键。 * 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与与键值关联的行。 * 创建聚集索引时,建议保持窄索引,即列宽窄。 * 使用聚集索引时,应该考虑检索一定范围的数据、读取预先排序的数据。 **非聚集索引** * 是与表或视图无关的结构。 * 包含非聚集索引键值,每个键值项有指向包含该键值的数据行的指针。 * 非聚集索引不影响表页面中数据的顺序。 * 使用非聚集索引时,应该考虑频繁更新的列、宽的关键字、太多并行的顺序插入。

正文

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

 

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

1 聚集索引

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

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

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

 

创建聚集索引时建议保持窄索引,即列宽窄,比如采用int,或者宽度窄的字符型(char(4))。

 

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

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

2 非聚集索引

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

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

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

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

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

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

与[转帖]SQL Server 聚集索引和 非聚集索引 说明相似的内容:

[转帖]SQL Server 聚集索引和 非聚集索引 说明

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

[转帖]SQL Server 不同版本之间的 区别说明

2021-05-12 23:5062070原创SQLServer 本文链接:https://www.cndba.cn/dave/article/4527 SQL Server 数据库版本也是在不断的进行迭代。目前主流存在的版本有:SQL Server 2008、2012、2014、2016、2017

[转帖]SQL Server 体系结构中的2个主要引擎 说明

2020-03-18 16:2321450原创SQLServer 本文链接:https://www.cndba.cn/dave/article/4498 SQL Server 由两个主要引擎组成∶关系引擎(relational engine)和存储引擎(storage engine)。 1 关系引擎

[转帖]SQL Server 内部数据库版本 及兼容表

2022-04-20 09:043100转载SQLServer Microsoft SQL Server 的较新版本创建的数据库无法附加或还原到较早的版本。之所以存在此限制,是因为较旧的版本不知道新版本中引入的文件格式有哪些变更。 如果你尝试将数据库附加到早期版本、或者还原到早期版本,将会收到 SQ

[转帖]Sql Server中通过sql命令获取cpu占用及产生锁的sql

https://www.jb51.net/article/266255.htm 这篇文章主要介绍了Sql Server中通过sql命令获取cpu占用及产生锁的sql,需要的朋友可以参考下 获取SQLSERVER中产生锁的SQL语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1

[转帖]sql server 2016不能全部用到CPU的逻辑核心数的问题

https://blog.csdn.net/u011966339/article/details/122969685 最近在工作中遇到了,sql server 2016 不能把CPU 的核心全部用到的问题.通过分析工具看到 总共CPU核心有72核,但sql 只能用到40核心,想信也有很多人遇到这问题

[转帖]SQL Server各版本序列号/激活码/License/秘钥

https://www.cnblogs.com/cqpanda/p/16184853.html SQL Server 2019# Enterprise:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8GEnterprise Core:2C9JR-K3RNG-QD4M4-JQ2HR-8468J

[转帖]SQL Server 2022 正式发布,支持 Azure 最多的 SQL Server 版本!

https://www.modb.pro/db/559467 SQLSERVER 最新版 2022年11月16日,我们宣布正式发布 SQL Server 2022,这是迄今为止支持 Azure 最多的 SQL Server 版本,并在性能、安全性和可用性方面不断创新。这标志着 SQL Server

[转帖]Sql Server 创建临时表

https://cdn.modb.pro/db/513973 创建临时表 方法一: create table #临时表名(字段1 约束条件,字段2 约束条件,.....) create table ##临时表名(字段1 约束条件,字段2 约束条件,.....) 方法二: select * into

[转帖]Sql Server - 文件和文件组体系结构

摘自 http://msdn.microsoft.com/zh-cn/library/ms179316(SQL.105).aspx SQL Server 将数据库映射为一组操作系统文件。数据和日志信息绝不会混合在同一个文件中,而且一个文件只由一个数据库使用。文件组是命名的文件集合,用于帮助数据布局和