【问题标题】:Primary Key Type: int vs long主键类型:int vs long
【发布时间】:2010-11-07 22:03:23
【问题描述】:

我知道一些软件商店因使用 int 类型作为持久类的主键而被烧毁。话虽如此,并非所有表格都超过 20 亿张。事实上,大多数人都没有。

那么,你们是只对那些映射到潜在大表的类使用 long 类型,还是为了保持一致而对每个持久类使用 long 类型?行业共识是什么?

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

【问题讨论】:

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


    【解决方案1】:

    即使表没有变得超大,但具有高周转率,即如果经常删除/插入行,Long 也可能是有利的。您的自动生成/顺序唯一标识符可能会在表格仍然很小的情况下增加到一个较大的数字。

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

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

    【讨论】:

      【解决方案2】:

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

      从浮点数变为双数会困难得多。

      【讨论】:

      • 有人使用 float 或 double 作为主键的那一天就是我辞去软件工程师的那一天。但我现在你的意思。对于浮点字段,与使用整数字段时相比,预先做出决定要重要得多。
      【解决方案3】:

      我使用整数作为我的代理键,除非我需要它们是别的东西。如果您不需要 Long,则不必总是使用它。

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

      【讨论】:

        【解决方案4】:

        因为对于 Select/Sorts,Int 总是更快。

        【讨论】:

        • 即使在 x64 中?我不这么认为。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 2019-04-30
        • 2011-08-17
        • 1970-01-01
        相关资源
        最近更新 更多