我有一个可以发表或仍在草稿中的文章表,可能有大约70/30的已发表/草稿比率。对表的最常见搜索将是已发布的文章。在执行此搜索时,我相信将草稿状态作为表和PK的一部分会更快:
CREATE TABLE article(
id VARCHAR(6),
draft BIT(1),
content TEXT,
PRIMARY KEY(draft, id)
)
…而不是使其正常化,并有一个单独的表,其中包含条款id号,以表明它们仍在草稿中。
我在寻找一张额外的,正常化的桌子的速度上是不是错了?
使用
BIT
作为最新版本MySQL的PK的一部分有什么问题吗? 最佳答案
在执行这次搜查时,我相信
更快地将草稿状态作为表和PK的一部分
暂时忘掉速度,因为这不是最重要的考虑因素。主键(目的是双关)的主要用途是建立唯一标识整行的列子集。所以,你应该问的问题是:
这是draft
身份的一部分吗?还是只有article
能识别id
?
两篇文章具有相同的article
但不同的id
状态是否同时存在?
根据这一点,您应该考虑是否在主键中包含draft
位。
如果您关心性能,可以考虑创建其他索引。