char 或 smallint 用於帶有數字程式碼的列?
我的應用程序中的列的值始終為 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'
) 時的性能損失。我認為,這個問題沒有正確的答案。如果不進行測試,您無法決定哪個更好。