Sql-Server
SQL Server:IDENTITY 與 INT 作為主鍵的性能
我的數據庫中最重要的表大約有 300,000 條記錄,並且還在增長。20 多張桌子都有 FK。它的主鍵是一個數字,但由於歷史原因被定義為 nvarchar(6),這顯然是低效的(而且醜陋的)。有時會從記錄中刪除記錄,因此主鍵接近 999,999,我必須更改它。身份欄位將是顯而易見的選擇。具有由觸發器或軟體產生的增量的 int 鍵或類似鍵將是一種替代方法。這是可行的,因為記錄總是一次插入一個。int 鍵會為複雜的查詢提供更好的性能嗎?
IDENTITY
它本身不是列類型,它是一個可以應用於任何整數列類型的屬性。它通常應用於 anINT
並且在這種情況下沒有區別(列是INT
列,具有定義的屬性IDENTITY
),儘管它可以應用於內部為整數的任何類型(BIGINT
,DECIMAL
,MONEY
, …)。雖然您的字元串類型很醜陋,並且整數會更有效,但更改為數字類型將需要相當多的測試工作,以確保您的應用程式碼中沒有任何異常之處使其對這些鍵的數據類型敏感。我強烈建議您不要只是做出改變並希望最好!
NVARCHAR(10)
如果任何程式碼假定鍵永遠不會超過六個字元,即使只是將鍵擴展到或這樣也可能會出現問題……如果您不切換到數字類型,至少考慮移動到CHAR()
- 非可變字元串格式也將更有效率,如果您只儲存數字,則不需要像N[VAR]CHAR
.