是否可以使用BIT作为主键的一部分?

时间:2018-02-08 11:28:53

标签: mysql

我有一份可能已发表或仍在草案中的文章表,可能有大约70/30的公布/草案比例。该表的最常见搜索将是已发表的文章。在执行此搜索时,我一直认为将草稿状态作为表格和PK的一部分会更快:

CREATE TABLE article(
id VARCHAR(6),
draft BIT(1),
content TEXT,
PRIMARY KEY(draft, id)
)

..而不是标准化它,并有一个单独的表,其中包含article.id数字,以表明它们仍在草稿中。

  • 我在查看额外的,标准化的桌子时的速度是不是错了?

  • 使用BIT作为具有最新MySQL版本的PK的一部分是否有任何问题?

1 个答案:

答案 0 :(得分:2)

  

执行此搜索时,我一直认为会这样   将草案状态作为表格和PK

的一部分更快

暂时考虑速度,因为这不是最重要的考虑因素。主键(双关语)的主要目的是建立唯一标识整行的列子集。所以,你应该问的问题是:

  • draft位是article身份的一部分吗?或id单独识别article
  • 具有相同id但不同draft状态的两篇文章可以同时共存吗?

根据这一点,您应该考虑是否在主键中包含draft位。

如果您担心性能问题,可以考虑创建其他索引。