2015-10-04 36 views
0

我对Integer和String鉴别器类型之间的性能差异有疑问。 我使用的加盟策略,即:JPA鉴别器类型性能

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

和我有一个正在扩展这个超类的一些子类。 哪个有更好的表现? DiscriminatorType.INTEGERDiscriminatorType.STRING

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

在此先感谢。

+0

你是什么意思“大规模”的确切。 – cool

+0

性能取决于数据库类型,索引类型,索引大小。也许这篇文章会帮助你:[https://weblogs.java.net/blog/caroljmcdonald/archive/2009/08/28/jpa-performance-dont-ignore-database-0](https://weblogs.java .NET /博客/ caroljmcdonald /存档/ 2009/08/28/JPA的性能不要-忽略数据库-0)。无论如何,尝试使用String和Integer类型来运行基准测试。 –

+0

谢谢安德烈。我做了一个基准测试,发现没有什么重大区别。当然,这是一个测试环境,当然在生产环境中,情况会有所不同。据我所知,eclipselink将生成查询,将鉴别器列与鉴别器值进行比较。所以唯一的性能问题是用数字或字符串进行比较。在Oracle和索引中,我并不认为有什么重大差别。可以? –

回答

1

正常情况下,使用整数字段作为主键列或索引列或联接会更好,如果这是你所问。

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

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