数据库中聚集索引和非聚集索引的区别 知乎

数据库中聚集索引和非聚集索引的区别 知乎,第1张

聚集索引:也称 Clustered Index。是指关系表记录的物理顺序与索引的逻辑顺序相同。由于一张表只能按照一种物理顺序存放,一张表最多也只能存在一个聚集索引。与非聚集索引相比,聚集索引有着更快的检索速度。

MySQL 里只有 INNODB 表支持聚集索引,INNODB 表数据本身就是聚集索引,也就是常说 IOT,索引组织表。非叶子节点按照主键顺序存放,叶子节点存放主键以及对应的行记录。所以对 INNODB 表进行全表顺序扫描会非常快。

非聚集索引:也叫 Secondary Index。指的是非叶子节点按照索引的键值顺序存放,叶子节点存放索引键值以及对应的主键键值。MySQL 里除了 INNODB 表主键外,其他的都是二级索引。MYISAM,memory 等引擎的表索引都是非聚集索引。简单点说,就是索引与行数据分开存储。一张表可以有多个二级索引。

根据 《MySQL技术内幕》 中的解释:

那么,我们需要先理解 “什么是数据完整性”

MySQL中InnoDB引擎是通过B+树这种数据结构进行数据存取的,而“索引”就是B+树的子叶结点(非树叶)。我们说InnoDB基于B+树查找数据,也可以说基于索引查找数据。利用好索引可以大大提高查询的性能。

最后,再来理解一下开头的那句话。

约束是一个 逻辑概念 ,它更多是指一种功能,用来保证数据完整性。索引是一个数据结构,因为索引是B+树的子叶结点。 当用户创建了唯一索引就创建了唯一的约束,我们创建了索引这个数据结构,起到了唯一约束的这个功能从而保证了数据完整性。

以上是我看书时个人观点的总结,仅供参考

一、使用不同:

主键索引是在创建主键时一起创建的,是基于主键约束而建立的,是不可以为空,也不可以重复。

唯一索是引基于唯一约束而建立的,可以为空不可以重复,主键索引本身就具备了唯一索引的功能。

二、作用不同:

唯一索引的作用跟主键的作用一样。不同的是,在一张表里面只能有一个主键,主键不能为空,唯一索引可以有多个,唯一索引可以有一条记录为空,即保证跟别人不一样就行。

比如学生表,在学校里面一般用学号做主键,身份z则弄成唯一索引;而到了教育局,他们就把身份z号弄成主键,学号换成了唯一索引。

三、定义不同:

普通索引:这是最基本的索引类型,而且它没有唯一性之类的限制。

唯一性索引:这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

扩展资料:

要对一个表建立唯一索引,可以使用关键字UNIQUE。对聚簇索引和非聚簇索引都可以使用这个关键字。

例子

CREATE UNIQUE CLUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

其中:CLUSTERED INDEX是用来建立聚簇索引的关键字,此语句的意思是在表mytable上的mycolumn字段上创建一个名为myclumn_cindex的聚簇索引,且为唯一索引。

参考资料来源:百度百科-唯一索引


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9954282.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存