首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中为主键选择字符可变数据类型的利弊是什么?

在SQL中为主键选择字符可变数据类型的利弊是什么?
EN

Stack Overflow用户
提问于 2013-03-18 12:36:02
回答 1查看 35.5K关注 0票数 36

在数据库课程中,我在我的教育(大约)。4年前,我认为应该避免使用字符串作为主键的数据类型。

可以告诉我选择一个字符的优缺点吗?在SQL中为主键选择数据类型,以及上面的前提在多大程度上是正确的?

注:(我正在使用PostgreSQL数据库)。我还在处理这样一种情况,您需要从另一个表中引用这样的表,从而将外键放在字符变化的数据类型上。请也考虑到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-18 13:27:10

选择字符数据类型作为主键字段的优点是可以选择它可以显示的数据。例如,可以将电子邮件地址作为用户表的关键字段。这样就不需要增加一个列了。另一个优点是,如果您有一个公共数据表,它包含多个其他表的索引(假设一个便笺表具有对财务、联系人和管理表的外部引用),那么您可以很容易地知道它来自哪个表(例如,您的财务表有一个F00001索引,CONTACT表有一个C00001索引,等等)。因为我反对这样的方法,所以在这个答复中,我恐怕缺点会更大。

缺点如下:

  1. 正是由于这个原因,在PostgreSQL中才存在串行数据类型。
  2. 将按顺序输入数字索引,并且需要进行最小的重新索引(即,如果您有一个带有键Apple、胡萝卜并希望插入Banana的表,则该表必须在索引周围移动,以便将Banana插入到中间。如果索引是数字的,则很少在索引中间插入数据)。
  3. 从数据中断开链接的数字索引不会改变。
  4. 数字索引更短,而且它们的长度可以固定(4字节与您选择的varchar长度不同)。

在您的例子中,您仍然可以将外键放在数字索引上,所以我不知道为什么要强制它为varchar类型。理论上,搜索和筛选数字字段的速度要比文本字段快,因为服务器将被迫首先转换数据。一般来说,您将有一个非聚集的数字主键,然后在您的数据列上创建一个群集键,您将对其进行大量筛选。

这是编写SQL时的通用标准,但在基准测试方面,您只会发现varchar列在连接和过滤方面比整数列慢一些。只要你的主键永远不会改变,你就会没事。

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

https://stackoverflow.com/questions/15477005

复制
相关文章

相似问题

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