首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于INT上的索引,而不是VARCHAR来说,进一步正常化是否值得呢?

对于INT上的索引,而不是VARCHAR来说,进一步正常化是否值得呢?
EN

Database Administration用户
提问于 2018-04-01 20:57:08
回答 1查看 300关注 0票数 1

我问了一个问题,我是否应该将一些静态数据正常化,普遍的共识是,由于数据是不变的,所以它没有必要,因此它不是多余的,不太可能导致更新/删除/插入异常。

但是,是否值得进一步规范化,这样我就可以获得一个INT类型的索引,而不是VARCHAR?我不知道大多数DBMS是如何在字符串上进行比较的,但是我可以想象整数比字符串更快。

同时,如果我们讨论的是一个B+树索引,那么我们只讨论内部节点的3-4比较,然而,对于键存在许多记录,我甚至不确定比较是否发生在该级别上。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-04-02 00:03:54

在各个方面,integer通常都比字符类型要小一些,而且速度更快。差异主要取决于字符串的长度。

您断言文本数据是不变的,否则这将是使用代理键(integer或其他什么)的有力理由。

这些情况仍然会使我倾向于添加一个integer代理密钥:

  • 字符串比4字节integer大得多.用短弦几乎什么都得不到。收益随着avg的增加而增加。字符串长度。
  • 键在多个索引和/或FK列中使用,因此好处加起来。
  • 您使用的是C以外的区域设置(典型情况),并且需要行以不可变(明显)的方式排序。字符类型的排序顺序取决于当前的区域设置(COLLATION)。
  • DB中的所有其他表都使用integer键,您不希望打破这种模式。

另一方面,使用Postgres9.5或更高版本,您可以从“缩写键”功能中获益。但前提是您必须使用区域设置C在一个*nix操作系统。这将使天平倾向于使用原始字符串。

相关信息:

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/202793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档