這是一種常見的DB設計問題。如果有一個關聯實體表(即交叉引用)包含基本上由兩個FK引用組成的記錄,它是否應以某種方式進行索引?是否有必要明確索引該表,因爲關聯表中的PK已按定義編入索引?如果需要索引它,它應該是一個組合索引,由兩個FK字段組成?DB關聯實體和索引
回答
其他表中引用的pk列上的索引不包括它。
通過將「關聯實體」表的兩個fk列定義爲複合主鍵(在大多數情況下應該如此(假設關聯是唯一的)),可以隱式創建多列索引。
涵蓋所有涉及的查詢或最佳列。
它還包括對第二列的查詢,但效率不高。
如果您有涉及第二列的重要查詢,請在該列上另外創建一個索引。
在此related question on dba.SE閱讀有關該主題的所有詳細信息。
或this question on SO,也涵蓋此主題。
假設您的關聯表有模式,如:
CREATE TABLE Association
(
ReferenceA INTEGER NOT NULL REFERENCES TableA CONSTRAINT FK1_Association,
ReferenceB INTEGER NOT NULL REFERENCES TableB CONSTRAINT FK2_Association,
PRIMARY KEY(ReferenceA, ReferenceB) CONSTRAINT PK_Association
);
有機會,你的DBMS會自動創建一些索引。
某些DBMS將爲這兩個外鍵中的每一個創建一個索引,併爲主鍵創建唯一索引。這有點浪費,因爲PK索引也可用於訪問ReferenceA。
理想情況下,只有兩個索引:ReferenceB的PK(唯一)索引和(允許重複的)FK索引,假定PK索引具有ReferenceA作爲第一列。
如果DBMS不會自動創建索引來強制執行參照完整性約束,則需要創建RI或FK重複項允許的索引。如果它不會自動創建一個索引來強制執行PK約束,那麼您也需要創建該唯一索引。好處是你只能爲理想情況創建索引。
根據您的數據庫管理系統,您可能發現創建沒有約束的表更有效,然後添加索引,然後添加約束(然後使用您創建的索引)。分裂計劃等事情也可以成爲這個因素;我忽略了他們上面。
這個概念依然很簡單—您希望總共有兩個索引,一個用於在兩列上強制實現唯一性,並在前導列上提供快速訪問權限,並在尾隨列上提供非唯一或重複允許的索引。
問題被標記爲與PostgreSQL相關,並且PostgreSQL從不爲外鍵創建索引;它確實爲主鍵或唯一約束創建了唯一的btree索引。 – kgrittn 2012-04-26 17:46:26
我同意這裏有一個PostgreSQL標籤;還有一個評論說它是一個通用的數據庫設計問題。我試圖覆蓋一般基礎,考慮到'PostgreSQL不會創建FK約束索引'(我並不知道這一點,並且有點驚訝,但是有點驚訝)。與之形成鮮明對比的是,Informix正處於「爲所有人創建索引」的學校。桌上有三個足夠的索引。 – 2012-04-26 18:08:29
某些DBMS還允許使用索引表。我不確定這是否有意義。如果您有兩個「僅索引」索引,則可能會有一個索引(ReferenceA,ReferenceB),另一個索引爲另一個索引。更可能的是,這種情況沒有意義。 – 2012-04-26 18:13:19
- 1. 關聯實體
- 2. 索引實體
- 3. 實體框架 - 關聯實體問題
- 4. 實體關係用戶和聯繫人
- 5. NHibernate實體和多個關聯
- 6. 附加實體和修改關聯
- 7. 關聯實體和ER模型
- 8. 實體框架4 - 關聯
- 9. SQL關聯實體問題
- 10. 創建關聯實體表
- 11. 實體關聯問題
- 12. ADO.NET實體關聯錯誤
- 13. 關係索引實體和投影查詢
- 14. 分頁和多個關係實體索引與AppEngine
- 15. Neo4j的SDN4實體繼承和索引
- 16. 關於如何快速索引db
- 17. ERD:關聯實體能否與弱實體有關係?
- 18. 實體框架沒有進行關聯和顯示聯結表
- 19. Solr索引HTML實體
- 20. mysql的索引和聯接
- 21. 索引和嵌套聯接
- 22. LINQ to SQL:自引用實體 - ParentID/ChildID關聯
- 23. CakePHP搜索實體的關聯字段等於字符串
- 24. JPA實體之間的關係。如何使實體從DB只從關係表
- 25. Hibernate搜索不索引/ reindex實體
- 26. 雙關聯數組或索引+關聯數組
- 27. 在Informix DB上使用索引(索引?)
- 28. Symfony2的 - 和實體之間的語義錯誤關聯檢索信息
- 29. 刪除不級聯自引用實體
- 30. 彈性Db工具和唯一索引
難道你在這裏發佈一個示例表結構嗎? – vyegorov 2012-04-26 15:15:53
@vyegorov:我認爲我們需要的所有信息已經在這裏。 – 2012-04-26 15:17:51