2012-10-10 36 views
1

我有一个任务:MySQL的INT VS布尔指数

记录数据库可以在状态:

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?

+1

不使用4位字段。 –

+1

这很可能无关紧要 - 除非您拥有数十亿记录,否则性能差异可能不值得考虑。我会说只是使用[SET](http://dev.mysql.com/doc/refman/5.1/en/set.html),并用它来完成 –

回答

0

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

0

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

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

0

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

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

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