欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL Server聚集索引和非聚焦索引

程序员文章站 2024-03-16 21:07:28
...

1、什么是索引?

索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。使用索引查数据无需进行全表扫描,可以快速查询所需的数据。

2、聚集索引和非聚集索引的区别?

一个表只能有一个聚集索引但可以有多个非聚集索引。

聚集索引的叶节点就是最终的数据节点,而非聚集索引的叶节仍然是索引节点,但它有一个指向最终数据的指针。

3、聚集索引和非聚焦索引的原理是什么?

如果给表上了主键(索引),那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是B树结构,换句话说,就是整个表就变成了一个索引。

4、为什么只能有一个聚集索引?

数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同。所以一张表只能存在一个聚集索引。

5、主键一定是聚集索引吗?

答:不是,可以是非聚集索引,只不过默认是聚集索引,主键必须依赖于索引。

go
CREATE TABLE T
(
	t_id int,
	t_name nvarchar(10),
	t_count int,
	t_version int,
	constraint pk_t_t_id primary key nonclustered(t_id) -- 添加非聚集索引主键
)
CREATE CLUSTERED INDEX idx_t_t_id ON t(t_id);  -- 添加聚集索引

 SQL Server聚集索引和非聚焦索引

6、索引只能包含一列吗?

答:可以包含多列

CREATE CLUSTERED INDEX idx_t_t_id_or_t_name ON t(t_id,t_name);  -- 添加一个包含多列的聚集索引

7、聚集索引的约束是唯一性,是否要求字段也是唯一的呢?     不要求唯一!

  分析:如果认为是的朋友,可能是受系统默认设置的影响,一般我们指定一个表的主键,如果这个表之前没有聚集索引,同时建立主键时候没有强制指定使用非聚集索引,SQL会默认在此字段上创建一个聚集索引,而主键都是唯一的,所以理所当然的认为创建聚集索引的字段也需要唯一。

  结论:聚集索引可以创建在任何一列你想创建的字段上,这是从理论上讲,实际情况并不能随便指定,否则在性能上会是恶梦。

8、为什么聚集索引可以创建在任何一列上,如果此表没有主键约束,即有可能存在重复行数据呢?

  粗一看,这还真是和聚集索引的约束相背,但实际情况真可以创建聚集索引。

  分析其原因是:如果未使用 UNIQUE 属性创建聚集索引,数据库引擎将向表自动添加一个四字节 uniqueifier 列。必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。

9、B树、二叉树、B+树的区别

二叉树的每个节点只能存储一个值,B树可以存储M个值。B树在每个节点都可以保存数据(键值对),B+树只有在叶子节点才可以存储数据

10、 B树根节点以及叶节点存储的内容

SQL Server聚集索引和非聚焦索引 

图片来源:https://blog.csdn.net/qq_33925869/article/details/89704056

11、开启IO数量

go
set statistics io on
select * from t where t_id = 3

SQL Server聚集索引和非聚焦索引