From 52d2b59f47531cca957f1efe22617c6325be2925 Mon Sep 17 00:00:00 2001 From: fuxuemingzhu Date: Sun, 26 Sep 2021 10:57:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=8A=E3=80=8C=E6=96=B0=E5=80=BC=E4=B8=8D?= =?UTF-8?q?=E5=A4=A7=E4=BA=8E=E6=97=A7=E5=80=BC=E3=80=8D=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E3=80=8C=E6=96=B0=E5=80=BC=E5=AD=97=E8=8A=82=E6=95=B0=E4=B8=8D?= =?UTF-8?q?=E5=A4=A7=E4=BA=8E=E6=97=A7=E5=80=BC=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 参考了初版书籍中的写法,避免歧义。 --- ch3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch3.md b/ch3.md index 243757d..ec38485 100644 --- a/ch3.md +++ b/ch3.md @@ -306,7 +306,7 @@ B树在数据库体系结构中是非常根深蒂固的,为许多工作负载 #### 将值存储在索引中 索引中的键是查询搜索的内容,而其值可以是以下两种情况之一:它可以是所讨论的实际行(文档,顶点),也可以是对存储在别处的行的引用。在后一种情况下,行被存储的地方被称为**堆文件(heap file)**,并且存储的数据没有特定的顺序(它可以是仅追加的,或者可以跟踪被删除的行以便用新数据覆盖它们后来)。堆文件方法很常见,因为它避免了在存在多个二级索引时复制数据:每个索引只引用堆文件中的一个位置,实际的数据保存在一个地方。 -在不更改键的情况下更新值时,堆文件方法可以非常高效:只要新值不大于旧值,就可以覆盖该记录。如果新值更大,情况会更复杂,因为它可能需要移到堆中有足够空间的新位置。在这种情况下,要么所有的索引都需要更新,以指向记录的新堆位置,或者在旧堆位置留下一个转发指针【5】。 +在不更改键的情况下更新值时,堆文件方法可以非常高效:只要新值的字节数不大于旧值,就可以覆盖该记录。如果新值更大,情况会更复杂,因为它可能需要移到堆中有足够空间的新位置。在这种情况下,要么所有的索引都需要更新,以指向记录的新堆位置,或者在旧堆位置留下一个转发指针【5】。 在某些情况下,从索引到堆文件的额外跳跃对读取来说性能损失太大,因此可能希望将索引行直接存储在索引中。这被称为聚集索引。例如,在MySQL的InnoDB存储引擎中,表的主键总是一个聚集索引,二级索引则引用主键(而不是堆文件中的位置)【31】。在SQL Server中,可以为每个表指定一个聚集索引【32】。