2015-05-29 43 views
2

對不起,我問了幾個人,並收到了不同的答案。通過Join(Junction)表在表格中創建索引

我有一個是由2列的連接表:(aID,bID)

  • 援助是一個外鍵表A和出價是一個外鍵表B

  • 援助和出價一起是連接表的主鍵。

以下哪一項是在連接表上創建索引的更有效方法?

  1. 在(aID,bID)上創建唯一索引。
  2. 在(aID,bID)上創建一個唯一索引,並在aID和bID上創建兩個單獨索引 。
  3. 爲aID和bID創建單獨的索引。
  4. 以上都不是(建議你自己的)。
+1

使用hadoop! (嚴重的是,這是一個愚蠢的問題,太多的未知數取決於你將如何處理表) –

回答

2

如果在(aID, bID)上有一個主鍵,Oracle已經有一個unique index,因此這裏的另一個索引將是多餘的。

對於每個外鍵列(獨立地)有一個general rule of thumbadd an index,然而,可能有(很)很少的情況,其中這將是多餘的或無效的,例如,你永遠不會被外鍵過濾,或者外鍵沒有選擇性。

因爲主鍵是(aid, bid),所以在aID上已經有一個索引,儘管不像只有aid的索引那樣密集。

另外,是否添加很多索引或很少索引的決定還取決於讀取與寫入的偏差 - 更多索引增加了I/O和磁盤寫入開銷,但這可能不是問題,例如在每天重建一次的報告服務器上。

所以TL;DR你可能要在bID的指數,因此也可能是有好處的加入對aID指數(尤其是如果bID不是一個窄型)。但是,與所有索引一樣,您需要知道數據分佈和訪問路徑以便確定。