我有一份可能已发表或仍在草案中的文章表,可能有大约70/30的公布/草案比例。该表的最常见搜索将是已发表的文章。在执行此搜索时,我一直认为将草稿状态作为表格和PK的一部分会更快:
CREATE TABLE article(
id VARCHAR(6),
draft BIT(1),
content TEXT,
PRIMARY KEY(draft, id)
)
..而不是标准化它,并有一个单独的表,其中包含article.id数字,以表明它们仍在草稿中。
我在查看额外的,标准化的桌子时的速度是不是错了?
使用BIT
作为具有最新MySQL版本的PK的一部分是否有任何问题?
答案 0 :(得分:2)
执行此搜索时,我一直认为会这样 将草案状态作为表格和PK
的一部分更快
暂时考虑速度,因为这不是最重要的考虑因素。主键(双关语)的主要目的是建立唯一标识整行的列子集。所以,你应该问的问题是:
draft
位是article
身份的一部分吗?或id
单独识别article
?id
但不同draft
状态的两篇文章可以同时共存吗?根据这一点,您应该考虑是否在主键中包含draft
位。
如果您担心性能问题,可以考虑创建其他索引。