mysql int vs boolean index

时间:2012-10-10 17:02:02

标签: mysql performance

我有一个任务:

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

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中的字段创建了索引?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

最后还有一些实际考虑因素。第一个选项可以更容易地添加其他类型的状态,它将确保一个记录只能有一个状态,并且您的表的大小会更小。