数据库杂谈(一)聚集索引和非聚集索引

1. 使用索引的好处:

1、保证数据记录的唯一性;

2、加快数据检索速度;

3、加快表与表间的连接速度;

4、在使用ORDER BY和GROUP BY子句中进行检索数据时可以显著减少查询中分组和排序的时间;

5、可以在检索数据的过程中使用优化隐藏器,提高系统性能。

2.聚集索引

  1. 作用:聚集索引中的键值的逻辑顺序决定了表中相应行的物理顺序

  2. 原理:平时我们使用电话簿,我们会将各个人物,按姓氏的字母大小等来进行排序,为了方便以后好查找,聚集索引也类型,聚集索引确定表中数据的物理顺序,让数据在物理存储中按一定的顺序来组织存储,方便以后的查找。

  3. 注意点:

  • 主键默认设置为聚集索引
  • 由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引,但该索引可以包含多个列,就像电话簿可以按姓氏和名字进行组织一样。

3.非聚集索引

  1. 原理:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。

  2. 说明:类似于字典,有目录,通过目录查找到相应的字才能找到相应的说明。索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

4. 适用情况

在这里插入图片描述

5.注意点

  1. 主键就应该是聚集索引
    通常我们建立主键都是设置一个id自增,而在适用中一般会通过名字或者日期等来查找数据,而不是通过自动生成的id。
    另外一方面,我们一个表又只能有一个聚集索引,如果设置为聚集索引就很浪费。
    只要建立索引就能显著提高查询速度

参考文章:https://blog.csdn.net/zhou_xuexi/article/details/78028931

6. 相关sql语句:

动作描述 使用聚集索引 使用非聚集索引

列经常被分组排序 应 应
返回某范围内的数据 应 不应
一个或极少不同值 不应 不应
小数目的不同值 应 不应
大数目的不同值 不应 应
频繁更新的列 不应 应
外键列 应 应
主键列 应 应
频繁修改索引列 不应 应

//

创建索引
create CLUSTERED INDEX 索引名称 ON 表名(字段名)
//删除索引
alter table 表名 drop constraint 主键约束名称
//将指定字段设置成主键非聚集索引
alter table 表名 add constraint 主键约束名称 primary key NONCLUSTERED(字段名) 
//创建表指定主键为非聚集索引,默认不写NONCLUSTERED为聚集索引
CREATE TABLE Test
( 
  ID INT PRIMARY KEY NONCLUSTERED  --非聚集索引
)

发布了36 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/s_xchenzejian/article/details/98379489