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

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聚集索引和非聚焦索引_第1张图片

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聚集索引和非聚焦索引_第2张图片 

图片来源: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聚集索引和非聚焦索引_第3张图片

你可能感兴趣的:(SQL,索引,INDEX,聚集索引,非聚焦索引,SQL,Server)