【问题标题】:JPA Discriminator Types PerformanceJPA 鉴别器类型性能
【发布时间】:2015-10-04 08:54:18
【问题描述】:

我对整数和字符串鉴别器类型之间的性能差异有疑问。 我正在使用 Joined 策略,即:

@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class SuperClass

我有一些子类正在扩展这个超类。 哪个性能更好? DiscriminatorType.INTEGERDiscriminatorType.STRING?

我们的提供商是 eclipselink,我们正在处理大量数据。

提前致谢。

【问题讨论】:

  • “大规模”到底是什么意思。
  • 性能取决于数据库类型、索引类型、索引大小。也许这篇文章会对你有所帮助:https://weblogs.java.net/blog/caroljmcdonald/archive/2009/08/28/jpa-performance-dont-ignore-database-0。无论如何,尝试使用 String 和 Integer 两种类型运行基准测试。
  • 谢谢安德烈。我做了一个基准测试,没有发现任何重大差异。当然这是一个测试环境,当然在生产环境中条件会有所不同。据我了解,eclipselink 将生成查询,其中它将鉴别器列与鉴别器值进行比较。所以唯一的性能问题是通过数字或字符串进行比较。在 Oracle 和索引中,我认为没有什么大的区别。是吗?

标签: java performance jpa orm eclipselink


【解决方案1】:

通常使用整数字段作为主键列或索引列或连接会执行得更好,如果这就是您所要求的。

但是如果你真的要处理大量数据,如果扩展类上没有很多不同的属性,你可以考虑使用 SINGLE_TABLE 而不是 JOINED 类型继承。

因为使用 JOINED 类型继承,每次需要数据时都需要执行额外的连接操作。而且你应该为每次插入做 2 次插入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2013-06-16
    • 1970-01-01
    • 2017-12-07
    • 2022-01-16
    • 2014-04-20
    相关资源
    最近更新 更多