我有一个可以发表或仍在草稿中的文章表,可能有大约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位。
如果您关心性能,可以考虑创建其他索引。

09-16 06:30
查看更多