mysql - Hibernate继承性能

标签 mysql performance hibernate inheritance union-subclass

我正在使用 Hibernate 3 和 MySQL 数据库(我尝试使用 Hibernate 4 但没有成功)。我已经实现了一个表每个具体类的继承策略(联合子类)。

除了多态查询,它可以完成工作。 Hibernate 生成一个基于 UNION 的查询,其中“where”子句位于高级查询中:

select primKey, param1, param2 from (
    select primKey, param1, param2 from Concrete1
    union
    select primKey, param1, param2 from Concrete2
)
where primKey == <value>
order by param1
limit 100

这会导致非常糟糕的性能,因为加载了整个具体表的内容,而由于 pkey 是抽象父项的属性,因此可以在子选择中定义“where”子句。

所以目标是让 Hibernate 生成这种查询:

select primKey, param1, param2 from (
    select primKey, param1, param2 from Concrete1 where primKey == <value>
    union
    select primKey, param1, param2 from Concrete2 where primKey == <value>
)
order by param1
limit 100

这样,查询会立即执行。

知道如何配置 Hibernate 来改变这种行为吗?

谢谢

是的。

最佳答案

我曾经遇到过类似的性能问题,但发现唯一的解决方案是(至少在当时)将实现切换到 "Table per class hierarchy"这提供了更好的性能,因为它不需要联合或连接。它不是那么简洁的模式明智,但如果你只有几个子类可能是一个很好的选择。

关于mysql - Hibernate继承性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11205550/

相关文章:

javascript - 用 Formik react 备忘录

MySql 存储过程循环游标 - 语法错误

php - MySQL查询问题: WHERE clause

mysql - 为什么 MySQL 容器在带有 WSL 2 的 Windows 10 Home 上不断重启?

android - 为什么 Android Eclipse 会不断刷新外部文件夹并花费很长时间?

java - Hibernate 4.1.9 c3p0 设置,以及与数据库的连接方式太多

mysql - 将 MyISAM 表从 Solaris 复制到 Linux

c++ - 什么是快速整数?什么定义了一个整数有多快?

java - PermGen 空间是否减少了?

java - 在 Axon 聚合中保留 ManyToOne/OneToOne 关系