Postgresql
進一步規範化以索引 INT FK 而不是 VARCHAR 值得嗎?
我問了一個關於我是否應該規範化一些靜態數據的問題,普遍的共識是沒有必要,因為數據是不變的,因此它不是多餘的,也不會導致更新/刪除/插入異常。
但是,是否值得進一步規範化,以便我可以獲得 INT 類型而不是 VARCHAR 的索引?我不確定大多數 DBMS 是如何對字元串進行比較的,但我想整數比字元串更快進行比較。
同時,如果我們談論的是 B+ 樹索引,我們只談論內部節點的 3-4 次比較,但是對於鍵存在許多記錄,我什至不確定是否在該級別發生比較。
integer
通常在各個方面都比字元類型更小更快。區別主要取決於字元串的長度。您斷言文本數據是不變的,否則這將是使用代理鍵(
integer
或其他)的有力案例。仍然會讓我傾向於添加
integer
代理鍵的情況:
- 字元串比 4-byte 大得多
integer
。短弦幾乎沒有任何好處。收益隨著平均值的增加而增長。字元串長度。- 鍵用於多個索引和/或 FK 列,因此好處加起來。
- 您使用除(典型情況)以外的語言環境
C
,並且您需要以不可變(明顯)的方式對行進行排序。字元類型的排序順序取決於目前的區域設置 (COLLATION
)。- 數據庫中的所有其他表都使用
integer
鍵,您不希望打破這種模式。另一方面,使用 Postgres 9.5 或更高版本,您可以從“縮寫鍵”功能中受益。但前提是您在 *nix OS 上使用語言環境
C
。這將使天平向使用原始琴弦傾斜。有關的: