我正在通过使用JUnit运行的测试在具有 3 个条目的表上对H2 数据库执行以下查询:
WITH ancestors(ID, PARENT_ID) AS
(
SELECT ID, PARENT_ID FROM PEOPLE WHERE ID = <person_id>
UNION ALL
SELECT P1.ID, P1.PARENT_ID FROM PEOPLE P1, PEOPLE P2 WHERE P1.ID = P2.PARENT_ID
)
SELECT ID FROM ancestors;
查询在包含人员的自引用表上执行。它找到一个人的所有祖先的 id。
由于某种原因,当测试挂起时,我猜想这是一个无限循环,我可以看到 RAM 使用率迅速上升(> 2GB)。为什么会发生这种情况,我该如何解决?
观察:
- 这在 Oracle 中执行得很好
- 如果表中没有指定 PARENT_ID,它会正常执行,但如果有,它会挂起并且 RAM 使用量不断增加。