From e98e415363cf3f9c0225987a6d3ef16926635b80 Mon Sep 17 00:00:00 2001 From: Gang Yin <1246410+yingang@users.noreply.github.com> Date: Sun, 26 Sep 2021 11:24:59 +0800 Subject: [PATCH] update zh-tw content --- zh-tw/README.md | 2 ++ zh-tw/ch3.md | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/zh-tw/README.md b/zh-tw/README.md index f8e88ba..51b2a07 100644 --- a/zh-tw/README.md +++ b/zh-tw/README.md @@ -152,6 +152,8 @@ | ISSUE & Pull Requests | USER | Title | | ----------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [132](https://github.com/Vonng/ddia/pull/132) | [@fuxuemingzhu](https://github.com/fuxuemingzhu) | ch3: 最佳化一處容易產生歧義的翻譯 | +| [131](https://github.com/Vonng/ddia/pull/131) | [@rwwg4](https://github.com/rwwg4) | ch6: 修正兩處錯誤的翻譯 | | [129](https://github.com/Vonng/ddia/pull/129) | [@anaer](https://github.com/anaer) | ch4: 修正兩處強調文字和四處程式碼變數名稱 | | [128](https://github.com/Vonng/ddia/pull/128) | [@meilin96](https://github.com/meilin96) | ch5: 修正一處錯誤的引用 | | [126](https://github.com/Vonng/ddia/pull/126) | [@cwr31](https://github.com/cwr31) | ch10: 修正一處錯誤的翻譯(功能 -> 函式) | diff --git a/zh-tw/ch3.md b/zh-tw/ch3.md index 8d3f156..cd5f441 100644 --- a/zh-tw/ch3.md +++ b/zh-tw/ch3.md @@ -297,7 +297,7 @@ B樹在資料庫體系結構中是非常根深蒂固的,為許多工作負載 ### 其他索引結構 -到目前為止,我們只討論了關鍵值索引,它們就像關係模型中的**主鍵(primary key)** 索引。主鍵唯一標識關係表中的一行,或文件資料庫中的一個文件或圖形資料庫中的一個頂點。資料庫中的其他記錄可以透過其主鍵(或ID)引用該行/文件/頂點,並且索引用於解析這樣的引用。 +到目前為止,我們只討論了鍵值索引,它們就像關係模型中的**主鍵(primary key)** 索引。主鍵唯一標識關係表中的一行,或文件資料庫中的一個文件或圖形資料庫中的一個頂點。資料庫中的其他記錄可以透過其主鍵(或ID)引用該行/文件/頂點,並且索引用於解析這樣的引用。 有二級索引也很常見。在關係資料庫中,您可以使用 `CREATE INDEX` 命令在同一個表上建立多個二級索引,而且這些索引通常對於有效地執行聯接而言至關重要。例如,在[第二章](ch2.md)中的[圖2-1](../img/fig2-1.png)中,很可能在 `user_id` 列上有一個二級索引,以便您可以在每個表中找到屬於同一使用者的所有行。 @@ -306,7 +306,8 @@ B樹在資料庫體系結構中是非常根深蒂固的,為許多工作負載 #### 將值儲存在索引中 索引中的鍵是查詢搜尋的內容,而其值可以是以下兩種情況之一:它可以是所討論的實際行(文件,頂點),也可以是對儲存在別處的行的引用。在後一種情況下,行被儲存的地方被稱為**堆檔案(heap file)**,並且儲存的資料沒有特定的順序(它可以是僅追加的,或者可以跟蹤被刪除的行以便用新資料覆蓋它們後來)。堆檔案方法很常見,因為它避免了在存在多個二級索引時複製資料:每個索引只引用堆檔案中的一個位置,實際的資料儲存在一個地方。 -在不更改鍵的情況下更新值時,堆檔案方法可以非常高效:只要新值不大於舊值,就可以覆蓋該記錄。如果新值更大,情況會更復雜,因為它可能需要移到堆中有足夠空間的新位置。在這種情況下,要麼所有的索引都需要更新,以指向記錄的新堆位置,或者在舊堆位置留下一個轉發指標【5】。 + +在不更改鍵的情況下更新值時,堆檔案方法可以非常高效:只要新值的位元組數不大於舊值,就可以覆蓋該記錄。如果新值更大,情況會更復雜,因為它可能需要移到堆中有足夠空間的新位置。在這種情況下,要麼所有的索引都需要更新,以指向記錄的新堆位置,或者在舊堆位置留下一個轉發指標【5】。 在某些情況下,從索引到堆檔案的額外跳躍對讀取來說效能損失太大,因此可能希望將索引行直接儲存在索引中。這被稱為聚集索引。例如,在MySQL的InnoDB儲存引擎中,表的主鍵總是一個聚集索引,二級索引則引用主鍵(而不是堆檔案中的位置)【31】。在SQL Server中,可以為每個表指定一個聚集索引【32】。