我已經在使用不同類型作爲PK的許多系統上工作過。常見種類有:數據類型對PK有多大的性能影響?
- 的Int32
- 的Int16
- VARCHAR(大小不等,通常約16)
- 唯一標識符
我知道的是,更多的內存在外地使用指數越大,因此搜索速度越慢(這樣nvarchar(1024)就會非常糟糕!)
如何引人注目(if任何)是PK列使用不同數據類型時的性能變化?
我已經在使用不同類型作爲PK的許多系統上工作過。常見種類有:數據類型對PK有多大的性能影響?
我知道的是,更多的內存在外地使用指數越大,因此搜索速度越慢(這樣nvarchar(1024)就會非常糟糕!)
如何引人注目(if任何)是PK列使用不同數據類型時的性能變化?
選擇幾個varchar列的組合作爲主鍵變大。如果您已經沒有一個索引並且索引也變大(在varchar上比在整數列上大),SQL Server會自動在主鍵上添加聚簇索引,而索引頁用於存儲索引的數量增加鍵。這增加了讀取索引所需的讀取次數,並降低了整體索引性能。整數需要較少的字節來存儲,因此主鍵索引結構將更小。 此外,與整數聯接相比,使用varchar的主鍵列可以使JOIN語句更慢。
如果您需要GUID鍵,那麼uniqueidentifier也很有用 - 保證您的架構,數據庫,服務器中的所有表都是唯一的。但是,他們有缺點的整數比傳統的4個字節的索引值的4倍,這可能具有的性能和存儲
您還可以看到GUID的成本VS INT更多信息here
這裏Selecting the right datatype to improve database performance
希望這會有所幫助
如果確實存在長字符串,nvarchar(1024)只會是壞的。這是最大長度,而不是保留空間。 – usr
我認爲下面將在很大程度上給你答案 http://stackoverflow.com/questions/10267046/choosing-sql-server-data-types-for-maximum-speed –
'nvarchar(1024)'將是一個相當無意義的PK定義,因爲你永遠不能插入大於900字節的值。無論如何,'nvarchar(450)'。 –