下面的查询大约需要一分钟。我相信性能不佳是由两个“IN(SELECT ...”子句引起的。我有一个术语表,其中一个可以通过 term_relationship 表连接到另一个。这些关系可以是递归的,例如 dog 是一种哺乳动物,哺乳动物是一种动物。这种递归可以是任何深度,但可能不超过 10 个级别。我正在尝试选择所有与 A 型具有(潜在递归)关系并具有(潜在递归)关系的术语使用 B 类型。我认为用对外部查询的限制替换两个“IN (SELECT ...”子句会提高性能,但无法弄清楚如何使用 CONNECT BY 子句来做到这一点。有人可以帮忙吗?
SELECT term_name
FROM term
WHERE term_id IN
(SELECT term_id
FROM term_relationship
START WITH related_term_id = 123
CONNECT BY NOCYCLE PRIOR term_id = related_term_id)
AND term_id IN
(SELECT term_id
FROM term_relationship
START WITH related_term_id = 456
CONNECT BY NOCYCLE PRIOR term_id = related_term_id)