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);  -- 添加聚集索引

 

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树和平衡二叉树稍有不同的是B树属于多叉树又名平衡多路查找树(查找路径不只两个),数据库索引技术里大量使用者B树和

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

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

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

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

å¨è¿éæå¥å¾çæè¿°

12、开启IO数量

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

13、什么是回表查询

先通过普通索引定位到主键值id=xxx,在通过聚集索引定位到行记录。

这就是所谓的回表查询 ,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。

 14、回表优化

将单列索引(name)升级为联合索引(name, sex),即可避免回表

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值