我被告知,若是我將兩個表外鍵,那麼SQL Server將建立相似於子表中的索引的東西。 我很難相信這是真的,但找不到與此有關的具體內容。 數據庫
我之因此提出這個問題的真正緣由是由於咱們在一個刪除語句中遇到了一個很是慢的響應時間,這個表可能包含15個相關表。 我問過咱們的數據庫人,他說若是字段上有外鍵,那麼它就像一個索引。 你有什麼經歷? 我應該在全部外鍵字段上添加索引仍是隻是沒必要要的開銷? 框架
在PostgeSql中,若是你點擊\\ d tablename,你能夠本身檢查索引 post
您將看到已在具備主鍵和惟一約束的列上自動建立btree索引,但不會在具備外鍵的列上建立。 spa
我認爲這至少對postgres來講是回答你的問題。 索引
外鍵不會建立索引。 只有備用鍵約束(UNIQUE)和主鍵約束才能建立索引。 在Oracle和SQL Server中也是如此。 ip
我注意到實體框架6.1指向MSSQL會自動在外鍵上添加索引。 get
外鍵是約束,是兩個表之間的關係 - 與索引自己無關。 io
可是已知的事實是,將全部列做爲任何外鍵關係的一部分的索引頗有意義,由於經過FK關係,您一般須要查找相關表並基於提取某些行單個值或一系列值。 table
所以,對FK中涉及的任何列進行索引是頗有意義的,但FK自己不是索引。 bug
查看Kimberly Tripp的優秀文章「SQL Server什麼時候中止在外鍵列上放置索引?」 。
據我所知。 外鍵僅添加一個約束,即子鍵中的值也能夠在父列的某處表示。 它並無告訴數據庫,子鍵也須要被索引,只能被約束。