JPA 鉴别器类型性能
Posted
技术标签:
【中文标题】JPA 鉴别器类型性能【英文标题】:JPA Discriminator Types Performance 【发布时间】:2015-10-04 08:54:18 【问题描述】:我对整数和字符串鉴别器类型之间的性能差异有疑问。 我正在使用 Joined 策略,即:
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class SuperClass
我有一些子类正在扩展这个超类。
哪个性能更好? DiscriminatorType.INTEGER
或 DiscriminatorType.STRING
?
我们的提供商是 eclipselink,我们正在处理大量数据。
提前致谢。
【问题讨论】:
“大规模”到底是什么意思。 性能取决于数据库类型、索引类型、索引大小。也许这篇文章会对你有所帮助:https://weblogs.java.net/blog/caroljmcdonald/archive/2009/08/28/jpa-performance-dont-ignore-database-0。无论如何,尝试使用 String 和 Integer 两种类型运行基准测试。 谢谢安德烈。我做了一个基准测试,没有发现任何重大差异。当然这是一个测试环境,当然在生产环境中条件会有所不同。据我了解,eclipselink 将生成查询,其中它将鉴别器列与鉴别器值进行比较。所以唯一的性能问题是通过数字或字符串进行比较。在 Oracle 和索引中,我认为没有什么大的区别。是吗? 【参考方案1】:通常使用整数字段作为主键列或索引列或连接会执行得更好,如果这就是您所要求的。
但是如果你真的要处理大量数据,如果扩展类上没有很多不同的属性,你可以考虑使用 SINGLE_TABLE 而不是 JOINED 类型继承。
因为使用 JOINED 类型继承,每次需要数据时都需要执行额外的连接操作。而且你应该为每次插入做 2 次插入。
【讨论】:
以上是关于JPA 鉴别器类型性能的主要内容,如果未能解决你的问题,请参考以下文章
未知的鉴别器值“SqlException”,如何忽略动态类型的鉴别器