1. 程式人生 > >資料庫-Oracle中的聚簇

資料庫-Oracle中的聚簇

Oracle中的聚簇:
Oralce中支援兩類聚簇,分別是索引聚簇和雜湊聚簇
索引聚簇的使用: 
◆對經常在連線語句中訪問的表建立聚簇。 
◆假如表只是偶爾被連線或者它們的公共列經常被修改,則不要聚簇表。(修改記錄的聚簇鍵值比在非聚簇的表中修改此值要花費更多的時間,因為Oracle必須將修改的記錄移植到其他的塊中以維護聚簇)。 
◆假如經常需要在一個表上進行完全搜尋,則不要聚簇這個表(對一個聚簇表進行完全搜尋比在非聚簇表上進行完全搜尋的時間長,Oracle可能要讀更多的塊,因為表是被一起儲存的。) 
◆假如經常從一個父表和相應的子表中查詢記錄,則考慮給1對多(1:*)關係建立聚簇表。(子表記錄儲存在與父表記錄相同的資料塊中,因此當檢索它們時可以同時在記憶體中,因此需要Oracle完成較少的I/O)。 
◆假如經常查詢同一個父表中的多個子記錄,則考慮單獨將子表聚簇。(這樣提高了從相同的父表查詢子表記錄的效能,而且也沒有降低對父表進行完全搜尋的效能)。 
◆假如從所有有相同聚簇鍵值的表查詢的資料超過一個或兩個Oracle塊,則不要聚簇表。(要訪問在一個聚簇表中的記錄,Oracle讀取所有包含那個記錄值的全部資料塊,如果記錄佔據了多個數據塊,則訪問一個記錄需要讀的次數比一個非聚簇的表中訪問相同的記錄讀的次數要多)。 
雜湊聚簇的使用: 
◆當經常使用有相同列的包含相等條件的查詢子句訪問表時,考慮使用雜湊聚簇來儲存表。使用這些列作為聚簇鍵。 
◆如果可以確定存放具有給定聚簇鍵值的所有記錄所需的空間(包括現在的和將來的),則將此表以雜湊聚簇儲存。 
◆如果空間不夠,並且不能為將要插入的新記錄分配額外的空間,那麼不要使用雜湊聚簇。 
◆如果偶爾建立一個新的、很大的雜湊聚簇來儲存這樣的表是不切實際的,那麼不要用雜湊聚簇儲存經常增長的表。 
◆如果經常需要進行全表搜尋,並且必須要為表的預期增長中的雜湊聚簇分配足夠的空間,則不要將此表以雜湊聚簇儲存。(這樣的完全檢索必須要讀分配給雜湊聚簇的全部塊,即使有些塊可能只包含很少的記錄。單獨地儲存表將減少由完全的表檢索讀取的塊的數量。) 
◆如果你的應用程式經常修改聚簇鍵的值,則不要將表以雜湊聚簇方式儲存。 
◆不論這個表是否經常與其他表連線,只要進行雜湊對於基於以前的指南的表合適,那麼在雜湊聚簇中儲存一個表則是有用的。