Sql-Server

char 或 smallint 用於帶有數字程式碼的列?

  • October 31, 2020

我的應用程序中的列的值始終為 4 位,例如“0100”或“1230”。範例之一可能是Merchant Category Code

目前,我已將此列的類型設置為char (4). 我有很多這種類型的專欄。其中一種類型的列也包含在非聚集UNIQUE索引中。我想為這種類型的專欄建立一種方法。

在應用程序中通過添加char (4)或添加到 開頭是否更好?smallint``' '``0

我擁有這些列的表是分區的,將包含大約 3 億條記錄。UPDATE可能不會在這種類型的列上執行。它們也不會出現在WHERE(有時可能出現在臨時報告中)。

我應該選擇哪種數據類型?

它就像一個郵政編碼,它可以是數字,但你必須儲存前導零

確切地。我正在考慮在性能方面什麼是更好的方法。還必須考慮到,如果我將其儲存為smallint,應用程式碼必須將其解析為字元串並添加前導零。

該標準明確表示“四位程式碼”,在我看來這意味著它應該始終包含 4 個數字字元,這反過來意味著適當的數據類型是char(4).

如果要確保程式碼值符合 ISO 18245,請將其char(4)與檢查約束一起儲存在數據庫中。

該文件說,smallint數據類型儲存大小為 2 字節,char(n)數據類型儲存大小為每個字元等於 1 個字節。

字元

$$ ( n ) $$固定大小的字元串數據。n 以字節為單位定義字元串大小,並且必須是 1 到 8,000 之間的值。對於拉丁語等單字節編碼字元集,儲存大小為n字節,可儲存的字元數也為n。 smallint -2^15 (-32,768) 到 2^15-1 (32,767) 2 字節

因此,數據類型大小將影響您的索引大小、查詢結果大小、記憶體使用。

但另一方面,您必須考慮添加 0 ( '0121') 時的性能損失。

我認為,這個問題沒有正確的答案。如果不進行測試,您無法決定哪個更好。

引用自:https://dba.stackexchange.com/questions/278652