问题描述
我对聚集索引有疑问
我从文档中读到,每当创建主键时,它都会创建聚集索引,并且它会按照与聚集索引相同的顺序对表中的行进行排序 (在实际磁盘上),我不明白点排序表中的行,这是否意味着文件中的记录是排序的,如果是,记录的物理地址应该改变,但事实并非如此,我检查了记录的物理地址保持不变,即使在创建主键约束列。
请帮助我理解概念。
我从文档中读到,每当创建主键时,它都会创建聚集索引,并且它会按照与聚集索引相同的顺序对表中的行进行排序 (在实际磁盘上),我不明白点排序表中的行,这是否意味着文件中的记录是排序的,如果是,记录的物理地址应该改变,但事实并非如此,我检查了记录的物理地址保持不变,即使在创建主键约束列。
请帮助我理解概念。
专家解答
我们不对表格进行排序-表格保持原样。简而言之:
表是 (通常) 堆结构,即,您添加行,并且它们分散在整个存储中。数据没有特定或预定义的顺序。我们随心所欲地把它塞进任何我们喜欢的地方。我们的重点是性能和并发性。
但是显然,如果您想对该数据有一些结构/规则,那么主键等就会发挥作用。要检查我们是否要记录一个重复的密钥在堆结构中是困难的-你必须 (a) 锁定表,(b) 扫描整个结构,因为重复的可能是结构中的任何地方。根本无法扩展。
因此,我们创建了一个额外的结构 (索引) 来坐在表旁边。(表数据仍然像以前一样,分散)。索引是一个有序的结构,因此在寻找重复项时,我可以在索引中快速找到重复项 * 存在的位置。检查起来要快得多。但这伴随着权衡。每次添加数据时,我都必须 * 维护 * 该有序结构。
我们使用B树结构来照顾它。在我们的概念手册中可以找到对此的出色描述
https://docs.oracle.com/database/121/CNCPT/indexiot.htm#CNCPT1170
表是 (通常) 堆结构,即,您添加行,并且它们分散在整个存储中。数据没有特定或预定义的顺序。我们随心所欲地把它塞进任何我们喜欢的地方。我们的重点是性能和并发性。
但是显然,如果您想对该数据有一些结构/规则,那么主键等就会发挥作用。要检查我们是否要记录一个重复的密钥在堆结构中是困难的-你必须 (a) 锁定表,(b) 扫描整个结构,因为重复的可能是结构中的任何地方。根本无法扩展。
因此,我们创建了一个额外的结构 (索引) 来坐在表旁边。(表数据仍然像以前一样,分散)。索引是一个有序的结构,因此在寻找重复项时,我可以在索引中快速找到重复项 * 存在的位置。检查起来要快得多。但这伴随着权衡。每次添加数据时,我都必须 * 维护 * 该有序结构。
我们使用B树结构来照顾它。在我们的概念手册中可以找到对此的出色描述
https://docs.oracle.com/database/121/CNCPT/indexiot.htm#CNCPT1170
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




