2015-12-22 70 views
0

我的谷歌搜索的權力不是爲這一個足夠強大。這全是理論問題。外鍵約束的大小

比方說,我有一個龐大的數據庫與數百個表和每個表都有它引用用戶表中的用戶列。現在

,如果我想改變用戶列有一個外鍵約束,將在數據庫大小的增加而顯着?

+0

取決於你的「* *巨大」的定義。但是,是的,數據庫的規模會增加,這是顯而易見的。但從注意到成爲一個問題,可能有很大的不同。數據庫增加的大小取決於數據庫和表中的數據量(行數),而不是數據庫(數百個表)的複雜度。我相信你可以在SSMS中看到一個對象在你的數據庫中佔據的大小,通過進入對象瀏覽器窗口,然後到你的對象,右鍵單擊並去屬性,但你必須先創建你的FK。 –

+0

@RaduGheorghiu:那是錯誤的。簡單地定義一個_constraint_不以任何方式更改數據庫的大小(除添加到系統目錄中的幾行) –

+0

@a_horse_with_no_name獲得的經驗,謝謝。 –

回答

2

如果「改變用戶列有一個外鍵約束」你的意思是這樣的:

alter table some_table 
    add constraint fk_some_table_users 
    foreign key (user_id) 
    references users (id); 

那麼答案是:不,這絕不會改變你的數據庫的大小(除了系統目錄中的一些額外的行來存儲約束的定義)。


的約束將改善你的數據的可靠性,並在某些情況下甚至可能有助於優化器移除不必要的加入或採取基於約束信息的其他快捷方式。然而,插入或刪除行因爲需要驗證約束而導致性能開銷很小。但是,這種小的開銷並不會超過您在數據庫中獲得一致數據所帶來的好處。

我從來沒有見過哪個聲稱能應用到「有控制之下」這並不需要已經生產了一段時間後,數據清理。所以最好將這種檢查留給數據庫。