我问了一个问题,我是否应该将一些静态数据正常化,普遍的共识是,由于数据是不变的,所以它没有必要,因此它不是多余的,不太可能导致更新/删除/插入异常。
但是,是否值得进一步规范化,这样我就可以获得一个INT类型的索引,而不是VARCHAR?我不知道大多数DBMS是如何在字符串上进行比较的,但是我可以想象整数比字符串更快。
同时,如果我们讨论的是一个B+树索引,那么我们只讨论内部节点的3-4比较,然而,对于键存在许多记录,我甚至不确定比较是否发生在该级别上。
发布于 2018-04-02 00:03:54
在各个方面,integer
通常都比字符类型要小一些,而且速度更快。差异主要取决于字符串的长度。
您断言文本数据是不变的,否则这将是使用代理键(integer
或其他什么)的有力理由。
这些情况仍然会使我倾向于添加一个integer
代理密钥:
integer
大得多.用短弦几乎什么都得不到。收益随着avg的增加而增加。字符串长度。C
以外的区域设置(典型情况),并且需要行以不可变(明显)的方式排序。字符类型的排序顺序取决于当前的区域设置(COLLATION
)。integer
键,您不希望打破这种模式。另一方面,使用Postgres9.5或更高版本,您可以从“缩写键”功能中获益。但前提是您必须使用区域设置C
在一个*nix操作系统。这将使天平倾向于使用原始字符串。
相关信息:
https://dba.stackexchange.com/questions/202793
复制相似问题