2011-08-20 58 views
2

長期與SQLServer一起工作之後,我習慣認爲與堆表相比,聚簇表(聚簇索引表)通常是更好的選擇。現在我也在和Oracle合作,我不明白爲什麼他們的表默認是堆。根據我的經驗,我可以說有很多情況下表應該是堆(再次,我主要處理SQLServer)。物聯網與Oracle中的堆表

Oracle是否有充分的理由爲「強制」(通過強迫我的意思是CREATE TABLE不指定organization index產生相反堆到默認創建聚集表的SQLServer)用戶使用堆表?

[更新]
澄清有關SQLServer的 - 我可能會濫用 「默認」 用於描述SQL Server的行爲;我知道,如果在CREATE TABLE中指定主鍵,它會創建一個聚集索引。我的意思是,我不需要指定PK是聚簇的。
[/更新]

此外,還有約集羣表VS在SQLServer的堆許多好文章,我不知道在何種程度上它可以應用到Oracle。

任何信息,非常感謝。

謝謝。

+0

SQL Server不會創建一個聚集索引是默認的表。 的圖表會,除非一個聚集索引在create table語句定義的物理存儲爲堆。 (注意:默認情況下,主鍵將作爲所述表上的集羣索引實現,除非另外明確指定。) –

+0

我不明白它與我在更新章節中所說的內容相矛盾...... CREATE TABLE table1 (id int not null identity(1,1)PRIMARY KEY)''在'id'上創建聚簇索引,除非我指定它是非聚簇的。這不是默認行爲嗎? – a1ex07

回答

2

我與甲骨文在我的經驗IOT(= B樹類)可具有中和或超重可能受益成本大量的工作......

「集羣」和IOT/B樹是在甲骨文不同的野獸術語 - 我不知道SQL Server的非常好,但讀了「集羣」是指從東西意味着什麼甲骨文不同...

這更是一個案件逐案決定的...雖然我喜歡堅持默認和根據需要進行優化...

有關Oracle/Index信息的某些鏈接:

+0

感謝您的鏈接,我會檢查它們。我知道羣集在SQLServer和Oracle中意味着不同,我只是習慣於sql server的術語;對於那個很抱歉。 – a1ex07

5

之一的甲骨文公司的歷史優勢一直是其行-1 evel鎖定機制,其中鎖存儲在數據行(而不是存儲器或單獨的結構)中。這意味着從來沒有必要「減少」事務中的鎖的數量,也沒有將行鎖升級到頁面(或表鎖)的概念。

它的併發和恢復機制也允許它來寫未提交的數據到磁盤,而不是讓他們在內存中。

這些緩解了同樣的問題,也可以通過聚類/結構樹表來解決。

總之,在Oracle堆表沒有同樣的問題在其他數據庫堆表,這樣你就不會在同一個物理塊得到協同定位相關的數據同樣的好處。