在我的数据库中,我有一个名为type
的列
在我的模型包中有一个信用额度,债务,储蓄
我的桌子可以有数十亿的记录 列表类型必须编入索引。
我正在使用MySQL 5.6
使用JPA来保持持久性。
我的问题是: 我应该为这样的列使用哪种数据类型?
我在想bout:整数或字符串。
如果我的列是int,我会使用EnumType.ordinal
,否则EnumType.string
。
现在哪种数据类型在性能方面更好:
我应该使用int还是字符串,还是有更好的第三种选择?
答案 0 :(得分:1)
如果您的数据库不直接支持枚举类型,则应使用INTEGER
列,因为使用字符串类型会占用更多空间,并且在计算上更难以搜索。
Postgres支持用户定义的枚举,数据库本身将在内部映射为整数,您可以将EnumType.STRING
与Postgres后端一起使用。这具有枚举类型的优点,例如更容易的人类阅读和范围检查。我不熟悉MySQL在这方面的能力。
答案 1 :(得分:1)
整数比varchars快,并允许使用自然枚举排序在数据库中进行排序。但是可读性会受到影响:当您查看数据库中的行时,0不如“CREDIT”清晰。
如果排序无关紧要,我首先会测量性能和空间增益是否值得读取损失,然后相应地选择。请记住,只有3个不同的值和如此大量的行,您最好先搜索另一个索引列,然后将要查看的行数除以3以上。