簡體   English   中英

什么是聚集索引表?

[英]What is a Clustered Index table?

我可能錯了,但在互聯網上似乎有不同意見。 SQL Server,MySQL,DB2和PostgreSQL顯示了這些表的不同定義。

在閱讀了不同供應商的數據(數據庫手冊,用戶帖子等)之后,我能夠區分出三種類型的感興趣的表(對於這個問題,有許多,更多類型沒有興趣)。 請多多包涵:

  1. 堆表

    • 所有行都存儲在堆表中(可能是無序的)。
    • 每行都有一個標識它的內部ROWID。
    • 索引是可選的。 如果添加,它們包括索引列作為索引鍵,加上ROWID(最終訪問堆中的實際行)。
    • 注意 :這個案例對這個問題沒有意義,但是我在這里添加了它,以便與下面的第三個案例有所不同。
  2. 純索引表 :< - 這是一個聚集索引表嗎?

    • 有一個主索引包括鍵列,以及其中的非鍵列。 所有數據都存儲在索引中。
    • 數據遵循主索引順序,因此按定義按主索引排序。
    • 堆表不需要存儲行。 所有數據都已在索引中。 沒有任何ROWID,因為沒有堆表。
    • 默認情況下, SQL Server表(通常)屬於此類別。
    • MySQL InnoDB表似乎也屬於這一類,因為它們似乎根本沒有堆表。
  3. 索引+排序堆表 :< - 這是一個聚簇索引表嗎?

    • 有一個主要的“聚集索引”。
    • 有一個堆表,其中行按聚簇索引定義的順序存儲。
    • 堆表中的每一行都有一個ROWID。
    • 聚簇索引不包括非鍵列,而是包含用於訪問堆表中實際行的ROWID。
    • DB2似乎能夠“集群”表。
    • PostgreSQL似乎也稱這些表為“Cluster ing Index”表。

現在,這些#2或#3中的哪些是“聚集索引表”? 誰在說實話,誰說謊? :d

換句話說,術語“聚集索引表”是一個商業術語,每個供應商可以根據他/她喜歡自由定義,還是根據某些官方數據庫理論有官方唯一定義?

據我所知,“聚簇索引”是索引的葉節點是數據頁的索引。 這與非聚集索引不同,其中葉節點是對存儲在數據頁上的行的引用。

一個表最多只能有一個聚簇索引。 在具有聚簇索引的表中,數據按索引鍵排序。

Postgres不支持聚簇索引。 它確實有一個名為“cluster”的表優化,它根據索引對數據進行排序。 但是,不保留此順序,因此它與聚簇索引不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM