我有一个任务:
数据库中的记录可以处于以下状态:
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中的字段创建了索引?
答案 0 :(得分:0)
就性能而言,我不确定它们会有什么不同,但就可维护性而言,最好只使用一个可以采用不同值的状态字段,而不是每个状态都有一列。如果明天你需要一个新的状态,使用第二个选项你必须改变表模式,而使用第一个选项你只需要使用一个新的状态标识符(例如“RESTORED = 5”)。
答案 1 :(得分:0)
表现可能无关紧要。更重要的是数据库设计。如果使用4位字段,则可以将多于1个状态设置为true
。这不应该发生。您可以通过触发器来阻止它,但最好只有一个状态字段,因为只有一个状态。
这样您就不必组合多个字段。
答案 2 :(得分:0)
第一个选项将有更好的机会获得更好的性能,因为您可以索引该字段。索引布尔字段没有任何效果,因为没有足够的不同值,MySQL将忽略该索引。
使用一个字段更有可能实际使用索引。
最后还有一些实际考虑因素。第一个选项可以更容易地添加其他类型的状态,它将确保一个记录只能有一个状态,并且您的表的大小会更小。