把「新值不大于旧值」改为「新值字节数不大于旧值」

参考了初版书籍中的写法,避免歧义。
This commit is contained in:
fuxuemingzhu 2021-09-26 10:57:50 +08:00
parent d996b9200e
commit 52d2b59f47

2
ch3.md
View File

@ -306,7 +306,7 @@ B树在数据库体系结构中是非常根深蒂固的为许多工作负载
#### 将值存储在索引中
索引中的键是查询搜索的内容,而其值可以是以下两种情况之一:它可以是所讨论的实际行(文档,顶点),也可以是对存储在别处的行的引用。在后一种情况下,行被存储的地方被称为**堆文件heap file**,并且存储的数据没有特定的顺序(它可以是仅追加的,或者可以跟踪被删除的行以便用新数据覆盖它们后来)。堆文件方法很常见,因为它避免了在存在多个二级索引时复制数据:每个索引只引用堆文件中的一个位置,实际的数据保存在一个地方。
在不更改键的情况下更新值时堆文件方法可以非常高效只要新值不大于旧值就可以覆盖该记录。如果新值更大情况会更复杂因为它可能需要移到堆中有足够空间的新位置。在这种情况下要么所有的索引都需要更新以指向记录的新堆位置或者在旧堆位置留下一个转发指针【5】。
在不更改键的情况下更新值时,堆文件方法可以非常高效:只要新值的字节数不大于旧值就可以覆盖该记录。如果新值更大情况会更复杂因为它可能需要移到堆中有足够空间的新位置。在这种情况下要么所有的索引都需要更新以指向记录的新堆位置或者在旧堆位置留下一个转发指针【5】。
在某些情况下从索引到堆文件的额外跳跃对读取来说性能损失太大因此可能希望将索引行直接存储在索引中。这被称为聚集索引。例如在MySQL的InnoDB存储引擎中表的主键总是一个聚集索引二级索引则引用主键而不是堆文件中的位置【31】。在SQL Server中可以为每个表指定一个聚集索引【32】。