1

我有一个任务:

数据库中的记录可以处于以下状态:

NEW = 1
CONFIRMED = 2
FINISHED = 3
DELETED = 4

1.

我可以将它们存储在 int 字段中,并带有索引,然后像这样选择:

... WHERE status = FINISHED ...
... WHERE status = DELETED ...

2.

我也可以将它们存储为 4 个独立的布尔字段

然后选择:

... WHERE finished_field = True ...
... WHERE deleted_field = True ...

哪种情况在性能(对于选择)1 或 2 方面更好,是否需要为情况 2 中的字段创建索引?

4

3 回答 3

0

在性能方面,我不确定它们会产生什么不同,但在可维护性方面,最好使用一个可以采用不同值的状态字段,而不是为每个状态设置一个列。如果明天你需要一个新的状态,使用第二个选项你必须改变表模式,而使用第一个选项你只需要使用一个新的状态标识符(例如“RESTORED = 5”)。

于 2012-10-10T17:15:31.527 回答
0

性能可能无关紧要。更重要的是数据库设计。如果您使用 4 位字段,则可以将多个状态设置为true. 那不应该发生。您可以通过触发器来防止这种情况,但最好有一个状态字段,因为只有一种状态。

这样您就不必组合多个字段。

于 2012-10-10T18:05:13.720 回答
0

第一个选项将有更好的机会获得更好的性能,因为您可以索引该字段。索引布尔字段没有任何效果,因为没有足够的不同值,MySQL 将忽略该索引。

使用一个字段更有可能实际使用索引。

最后还有一些实际的考虑。第一个选项将使添加另一种状态更容易,它将确保一条记录只能具有一种状态,并且您的表会更小。

于 2012-10-11T12:27:05.963 回答