【发布时间】:2018-01-21 12:10:35
【问题描述】:
我有多个使用entityManager.createNativeQuery(sqlQuery).getResultList() 执行的查询,这些查询需要数十秒(最多几分钟)才能执行。我启用了 Hibernate 日志记录,并在连接到同一个数据库的 IntelliJ 中执行了完全相同的 SQL 查询。查询在不到 10 毫秒内返回。
数据库是嵌入H2的,数据库驱动是一样的。查询不包含任何参数(这消除了this)。它们只返回整数(ID 和计数)。如果我连续两次执行查询,则第二个查询几乎立即返回。无论我给JVM分配128M还是2048M,查询执行时间都是一样的。
查询看起来并不太复杂。我唯一注意到的是,其中一些具有我加入或与之比较的内部选择语句。我猜它们不是真正的问题,因为当不从我的程序中执行时,它们可以非常快速地执行。
程序的其余部分运行良好,还有其他查询运行速度与预期一样。
这是一个示例查询:
SELECT
USER_ID,
count(result) AS count
FROM USERAPIACCESS
WHERE USER_ID IN (123)
AND RESULT IN ('SUCCESSFUL')
GROUP BY USER_ID, RESULT
ORDER BY USER_ID, RESULT
【问题讨论】: