哪个数据类型用于表示Enum的列?

时间:2015-02-04 18:00:24

标签: java mysql spring jpa

在我的数据库中,我有一个名为type的列 在我的模型包中有一个信用额度,债务,储蓄

我的桌子可以有数十亿的记录 列表类型必须编入索引。

我正在使用MySQL 5.6

使用JPA来保持持久性。

我的问题是: 我应该为这样的列使用哪种数据类型?

我在想bout:整数或字符串。

如果我的列是int,我会使用EnumType.ordinal,否则EnumType.string

现在哪种数据类型在性能方面更好:

  • 基于此键搜索
  • 并加入一些?

我应该使用int还是字符串,还是有更好的第三种选择?

2 个答案:

答案 0 :(得分:1)

如果您的数据库不直接支持枚举类型,则应使用INTEGER列,因为使用字符串类型会占用更多空间,并且在计算上更难以搜索。

Postgres支持用户定义的枚举,数据库本身将在内部映射为整数,您可以将EnumType.STRING与Postgres后端一起使用。这具有枚举类型的优点,例如更容易的人类阅读和范围检查。我不熟悉MySQL在这方面的能力。

答案 1 :(得分:1)

整数比varchars快,并允许使用自然枚举排序在数据库中进行排序。但是可读性会受到影响:当您查看数据库中的行时,0不如“CREDIT”清晰。

如果排序无关紧要,我首先会测量性能和空间增益是否值得读取损失,然后相应地选择。请记住,只有3个不同的值和如此大量的行,您最好先搜索另一个索引列,然后将要查看的行数除以3以上。