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