2013-12-20 71 views
0

我已經在使用不同類型作爲PK的許多系統上工作過。常見種類有:數據類型對PK有多大的性能影響?

  • 的Int32
  • 的Int16
  • VARCHAR(大小不等,通常約16)
  • 唯一標識符

我知道的是,更多的內存在外地使用指數越大,因此搜索速度越慢(這樣nvarchar(1024)就會非常糟糕!)

如何引人注目(if任何)是PK列使用不同數據類型時的性能變化?

+2

如果確實存在長字符串,nvarchar(1024)只會是壞的。這是最大長度,而不是保留空間。 – usr

+1

我認爲下面將在很大程度上給你答案 http://stackoverflow.com/questions/10267046/choosing-sql-server-data-types-for-maximum-speed –

+2

'nvarchar(1024)'將是一個相當無意義的PK定義,因爲你永遠不能插入大於900字節的值。無論如何,'nvarchar(450)'。 –

回答

2

選擇幾個varchar列的組合作爲主鍵變大。如果您已經沒有一個索引並且索引也變大(在varchar上比在整數列上大),SQL Server會自動在主鍵上添加聚簇索引,而索引頁用於存儲索引的數量增加鍵。這增加了讀取索引所需的讀取次數,並降低了整體索引性能。整數需要較少的字節來存儲,因此主鍵索引結構將更小。 此外,與整數聯接相比,使用varchar的主鍵列可以使JOIN語句更慢。

如果您需要GUID鍵,那麼uniqueidentifier也很有用 - 保證您的架構,數據庫,服務器中的所有表都是唯一的。但是,他們有缺點的整數比傳統的4個字節的索引值的4倍,這可能具有的性能和存儲

您還可以看到GUID的成本VS INT更多信息here

這裏Selecting the right datatype to improve database performance

希望這會有所幫助