2011-06-11 16 views

回答

1

Informix處理聚簇索引的方式是重建表(和索引),以便索引創建時表中的數據處於正確的物理順序。此後,行被插入哪裏看起來最合適,這不會繼續保持聚集順序。通過Informix Dynamic Server的11.70在2010年

的;這(在1985年的Informix-SQL 1.10)從1986年以來的情況下,由於Informix的SQL 2.10(我沒有爲仍然手動可能爲2.00)聲明:

ALTER INDEX idxname TO NOT CLUSTERED; 

總是很快。該補充聲明:

ALTER INDEX idxname TO CLUSTERED; 

往往是一個緩慢的過程,涉及創建表和一個完整的新版本刪除舊錶和索引之前的指數。


ISQL 1.10手冊沒有ALTER INDEX; 2.10手冊確實有ALTER INDEX。

+0

「...插入哪裏似乎最合適......」意思就像在EOF?..我不再使用2.10,我達到4.10(DOS),並在虛擬PC 2007下工作正常。卸載表在我的SELECT語句中創建一個ORDER BY並重新創建表和索引將等同於創建一個聚集索引?我每七天做一次這樣的操作,並且可以在兩萬次之前運行良好,但可以想象需要花費很長時間才能完成500,000次。 – 2011-06-11 22:11:31

+0

我的目標是當我查詢我的20,000個客戶之一時,我想要快速響應查找所有查詢的客戶交易,這些交易位於子表中。如果客戶交易分散在整個表中,則返回它們需要更長的時間,而通過customer.id將這些交易集中在一起。 – 2011-06-11 22:20:48

+1

@Frank:'意思就像在EOF';如果你還沒有刪除任何東西,那麼最後是。如果您刪除了行,那麼這些插槽可能會被重新使用。是的,使用ORDER BY和LOAD進行UNLOAD與創建聚集索引基本相同 - 儘管系統上的工作負載更高,因爲聚集索引不必在卸載時將所有數據傳輸到客戶端,並返回到加載服務器。 – 2011-06-11 22:39:46

1

我無法回答IDS,但我可以爲你提到的一些。

它取決於平臺:它使用頁面,它是否將數據從索引樹中分離出來?

一般來說,行的物理排序並不維護:只有邏輯順序可以

原因:一個固定大小的頁面上,你可以不「騰出空間」(波希米亞建議)

所以如果你擴展成行(例如添加更多的數據到LONG VARCHAR)或插入(行之間id IN (2,4)ID=3)之間那麼下面的一個發生

  • 行取出一個新的頁面婆(每頁)半成品
  • 行溢出(例如SQL服務器2005+)
  • 頁面被分割

這導致邏輯/索引碎片和減少數據密度:這就是爲什麼我們的索引維護刪除這個。

相關問題