为啥我们需要主键以及它与索引有何关系

Posted

技术标签:

【中文标题】为啥我们需要主键以及它与索引有何关系【英文标题】:why we need primary key and how does it related with index为什么我们需要主键以及它与索引有何关系 【发布时间】:2017-09-08 11:48:20 【问题描述】:

我有一个场景,其中有两个具有唯一元素的表,并且两个表都包含相同类型的记录。现在一个表有主键,另一个没有。那么如果我在两个表中都有唯一元素,那么拥有主键有什么好处。以及主键与索引的关系。? 我在诺基亚面试中被问到这个问题。非常令人困惑,请用某种例子回答。

【问题讨论】:

Primary key or Unique index?的可能重复 difference between primary key and unique key的可能重复 Wikipedia - unique keys也有文章 【参考方案1】:

拥有主键有什么好处?

主键诱导或强制列具有两个条件-

    唯一值 非空

因此,当插入表格行时,它必须满足这两个条件。如果表已经有一些记录,它将在添加约束时检查唯一性。如果该属性有重复条目,则不能添加主键约束。

主键和索引有什么关系?

当您将属性声明为PRIMARY KEY 时,默认情况下会在该属性上创建索引。 当记录数过多时,这有助于更快地访问记录。 (=> 更快的获取)。

但是对于小表,索引会减慢速度,因为每次插入/更新一行时它都需要更新索引。

【讨论】:

如果我的所有记录都是唯一的。正如我提到的一个例子,primary 将如何增加优势。你能按照那个描述一下吗 在属性上添加主键会在记录上创建索引。所以性能会更好,这不是只有唯一记录(没有索引)的情况。唯一列也可以为空,主列不能为空。我没有看到除此之外的任何其他原因。希望这会有所帮助

以上是关于为啥我们需要主键以及它与索引有何关系的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们需要使用 Android Studio 来构建 Flutter 应用? [关闭]

SQL:主键和索引到底是做啥的?

我是不是需要为关系数据库表的主键创建单独的索引

什么是 HSQLDB(Hyper SQL)以及它与其他数据库有何不同?

为啥我需要将子表的主键作为父表的外键,而不是相反的 1:1 识别关系?

什么是以太?它与以太网有何关系?