2012-07-22 118 views
1

如果我沒有弄錯聚簇索引根據一些自定義順序在磁盤上物理排序表的行。我假設表格存儲在文件中(也許每個表格有一個文件?)。那麼不過,假設有人在表格中插入一個「新行」,並且應該放置在開始處。數據庫然後需要在文件中物理地移動整個表格(所有行)?是不是太慢或有沒有任何優化技術如何在插入後實現排序順序?插入聚簇索引表

+1

什麼RDBMS? SQL Server? – 2012-07-22 15:08:26

+0

如果您正在談論** SQL Server ** - 那麼數據將以8K頁的形式保存在一個平衡的b-tree結構中。在表格中插入新行的位置幾乎是不相關的 - 可能或可能不需要執行某些步驟,但它肯定是**而不是「順序」文件類結構,需要轉移到當插入一個新行時......回到 – 2012-07-22 15:59:19

回答

3

表格不一定存儲爲文件。從邏輯上講,它們存儲在頁面中。假設每個頁面有100行,並且在需要時可以保存額外的20行。然後將所有頁面鏈接在一起以製作整個表格數據。

就你而言,當你在開始時添加一個新行時,只需更改第一頁,只需移動100行。如果您一遍又一遍地執行該操作,那麼當該頁面的行數超過120時,該頁面將被拆分爲兩個鏈接在一起的新頁面。

+0

是啊,你是對的,我的錯誤。 – 2012-07-22 15:17:26

+0

我只想補充一下。 。 。 「表格不一定存儲爲文件」。數據庫可以存儲不管他們喜歡的表,並且一些支持SQL的數據庫可能會選擇將表放入文件中。大多數不這樣做,但這是編寫引擎的人的設計決定。 – 2012-07-22 16:13:02

+0

好點。當然,任何數據庫都可以將表格保存到文件。我對這個問題給出了一個總體的看法。但在大多數情況下以及大多數DBMS(如Oracle,DB2或SQL服務器)中,它都是這樣的:行 - >頁 - >表 - >文件或磁盤。根據你的觀點,我會編輯我的回覆。 – 2012-07-22 19:14:11