2011-04-28 22 views
2

我想知道如果一個表或特別是與一個屬性上創建的聚集索引的堆文件對該屬性進行排序。是否有排序的堆文件和堆文件與聚簇索引之間的區別?具有聚簇索引的表的記錄是否在羣集關鍵字上物理排序?

+0

它取決於使用的數據庫和後端存儲。 (更新問題更具體的環境可能會產生更好的答案)。但通常用於聚類的關鍵字會影響物理數據的佈局。 – 2011-04-28 17:12:17

回答

2

有排序的堆文件和堆文件與聚簇索引有區別嗎?

排序後的堆文件是一個堆(類似數組的結構),其元素排序。這是MyISAMALTER TABLE … ORDER BY …PostgreSQL一起用於CLUSTER。在這樣的表格中插入一條新記錄會打亂訂單。

聚集索引是B-Tree。插入新記錄可以保持訂單。

聚簇表中的記錄不一定是物理排序的(從某種意義上說,聚簇鍵的值較高的記錄在文件或表空間中具有較高的偏移量)。

相反,記錄,邏輯排列:您可以從一個記錄穿越到另一個以下B-Tree鏈接(或在B+Tree的情況下,頁面之間的直接鏈接),但是這仍然意味着隨機磁盤尋道因爲邏輯上鍊接的頁面並不必須在磁盤上彼此靠近。

有些數據庫,Oracle例如,允許讀取物理順序不維護的邏輯順序,但帶來的好處或頁面順序訪問的速度更快,因爲索引(使用被稱爲INDEX FAST FULL SCAN的操作)。

「沒有聚簇索引的堆文件」沒有這樣的事情:表組織是堆或聚簇。

相關問題