2012-11-29 73 views
0

我有一個網站需要做大量的主動搜索用戶。我有一個用戶表,其中包含所有完整用戶詳細信息的鏈接,但只有在查看自己的帳戶時才真正感興趣。在搜索其他用戶時,您需要的信息非常有限,因此爲了使搜索更快更高效,每次更新用戶詳細信息時,代碼都會將一個條目寫入名爲UserLight的單獨表格 - 該表格僅包含大約8列並且都是純數據 - 即沒有鏈接到其他子表或集合對象,只是字符串數據的速度。每個用戶每次只能有一個UserLight條目,這是他們的帳戶對其他用戶的顯示方式的摘要表示。與外鍵的SQL表性能

我的問題是性能,是否有關係,我使UserId用戶表的外鍵約束?因此,如果沒有User中對應的行,則無法創建UserLight條目,並且在刪除用戶行時,它會自動級聯並刪除UserLight條目。這是理想的,我想如何獲得它,但我只是想知道是否以任何方式在UserLight表上具有此FK約束會減慢讀取或寫入該表的寫入操作的性能?如果是這樣,我很高興放棄FK約束,並有一個完全隔離的表,沒有任何約束或對其他對象的外部引用來加速性能,只是手動管理內務管理,但如果FK約束根本不影響性能 - 寧願保留它。

+2

外鍵約束與性能無關。有正確的連接和正確的索引將會對性能造成更大的損害。至於它會如何影響你的數據庫?誰知道?有太多的因素,你需要測試有無發現。 – Oded

+0

實際上,它們在級聯刪除的情況下具有影響,具體取決於您的dbms。 Sql server examlle http://stackoverflow.com/q/2525191/532498 – Pleun

+0

外鍵還可以提高性能,因爲它爲優化程序提供了有關數據如何關聯的更多信息。看到這裏例如:http://stackoverflow.com/a/8154375/330315或這裏http://aberdave.blogspot.de/2011/04/referential-integrity-and-optimizer.html –

回答

1

它不會妨礙您的性能,而是更傾向於限制數據以避免插入/刪除/更新異常。