2014-02-26 70 views
6

直到現在我的外鍵一直是uniqueidentifiers或int。使用nvarchar作爲外鍵怎麼樣?

如果我使用nvarchar字段作爲外鍵,會對性能產生負面影響嗎?是否還有其他我應該關注的事項?

+0

是[這](http://stackoverflow.com/questions/17469677/does-it-worth-switching-a-primary-key-from-the-type-nvarchar-to-the-type -int)相關? – Alexander

+1

@AmitAgrawal'nvarchar'可以是外鍵 – zzlalani

+0

是的,它會對性能產生負面影響 - 因爲varchar的潛在大小和可變長度。另外:由於您正在比較字符串,因此您可能會遇到(a)拼寫和(b)大寫和小寫字母(如果您的歸類有時區分大小寫,其他時間區分大小寫)的問題。總而言之 - 你*可以*使用'varchar'作爲FK - 但是如果可能的話,我會推薦它 –

回答

3

雖然你可以爲nvarchar爲外鍵,但我不建議你使用爲nvarchar作爲外鍵。有很多原因,我認爲非常重要的一個原因是當你要JOIN時,nvarchar會比int慢。

如果我使用nvarchar字段作爲外鍵,會對性能產生負面影響嗎?

是肯定會有性能問題,因爲一個int使用4字節的數據,並且通常比NVARCHAR更快。

您還可以通過採取列INT和nvarchar檢查通過使用存儲過程sp_spaceused使用的空間,你會發現差別。

EXEC sp_spaceused 'TableName'