主键类型:int vs long

时间:2010-11-07 22:03:23

标签: java persistence int primary-key long-integer

我知道有些软件商店已经使用int类型作为持久化类的主键进行了刻录。话虽如此,并非所有表格都超过20亿。事实上,大多数都没有。

那么,你们是否只为那些映射到潜在大型表的类使用long类型,或者为每个持久类使用long类型才能保持一致?什么是行业共识?

我会暂时搁置这个问题,以便您与我们分享您的成功/恐怖故事。

4 个答案:

答案 0 :(得分:22)

即使表格不会变得超大,但是具有高周转率,即如果频繁删除/插入行,则长期可能是有利的。当表格保持较小时,您的自动生成/顺序唯一标识符可能会增加到较高的数字。

我通常使用Long,因为在我的大多数项目中性能优势都不明显,但是由于溢出导致的错误会非常明显!

这并不是说Int对于其他人的场景来说不是更好的选择,例如数据处理或复杂的查询系统。只需清楚风险/收益以及它们如何影响您的特定项目。

答案 1 :(得分:2)

我不知道“被烧”。当你需要时,从int更改为long并不困难。转换在SQL中是直接的,然后它只是在客户端代码中进行搜索和替换(或者在持久层中进行更改,然后编译并查看有什么中断。)您正在从一个整数类型转换到另一个整数类型,所以你不必担心微妙的转换问题或截断..

从浮动变为双倍会更加困难。

答案 2 :(得分:1)

我使用Integer作为我的代理键,除非我需要将它们作为其他东西。如果您不需要Long,则无需始终使用Long。

(我通常在针对Oracle 10g或MySQL 5.x数据库运行的项目中使用JPA / Hibernate。)

答案 3 :(得分:1)

因为选择/排序的Int总是更快。

相关问题