2015-09-05 92 views
1

我試圖知道一個沒有聚集索引的表被視爲堆表,然後使用主鍵的表被稱爲'??'。 如果兩者都不存在,那麼它將被稱爲堆表。 主鍵會給邏輯順序,然後什麼聚集索引會給或他們都會做同樣的操作。 這不是學習,我只是想知道深潛,但每個人都有自己的版本。所以我回到我的社區專家....我已經做了很多閱讀,所以請考慮它作爲有效的問題沒有聚集索引的表被認爲是堆表?

+0

嘗試http://dba.stackexchange.com/ –

+0

我們可以將此問題遷移到堆棧交換 – mohan111

+0

我已投票遷移 –

回答

0

主鍵是一個約束,當您創建一個主鍵時,它實際上會在幕後創建一個聚集索引來強制執行主鍵約束。

簡而言之,A Primary實際上是一個表上的聚集索引。

是的,當表上沒有聚集的索引/主鍵定義時,它被稱爲HEAP。

創建一個沒有主鍵列的表並檢入SSMS,它將沒有該表的約束或索引。

CREATE TABLE Index_Test(ID INT NOT NULL) 
GO 

入住SSMS對象資源管理器:

enter image description here

現在創建這個ID列主鍵,看看會發生什麼:

ALTER TABLE Index_Test 
ADD CONSTRAINT PK_ID PRIMARY KEY (ID) 
GO 

現在刷新SSMS表擴大所有節點看什麼有:

enter image description here

我只添加了主鍵約束,但它實際上爲我創建了一個集羣索引。

+0

如果你打算在默認情況下創建主鍵,那麼聚簇索引就會到來,但是有必要爲每個主鍵創建一個主鍵,反之亦然 – mohan111

+0

當你創建一個主鍵時,它會在場景後面爲你創建一個聚集索引,這個是如何sql服務器強制約束(主鍵,唯一約束)。 –

+0

表有聚集索引,並沒有主鍵然後會有什麼影響 – mohan111

0

沒有聚集索引的表是「堆表」。 堆表沒有順序,行在插入時存儲。

具有聚簇索引的表是「聚簇表」。 按照集羣索引中的關鍵字段排列集羣表。
創建主鍵時,只有在沒有任何關鍵字時纔會創建聚集索引。也可以通過明確指定創建具有非聚集索引的主鍵。
一個表格可以有唯一一個集羣索引。 對於插入或更新行時的聚集索引,重新安排索引以維護索引中的順序。

對於堆表而言,插入或更新行時沒有任何安排,即它們存儲在SQL服務器可用於所述表的頁面中。 希望這能澄清你的一些疑問,隨時要求澄清。

相關問題