我正在处理一些相当大的搜索功能查询。有许多不同的输入,因此查询非常大。它已经发展到有 2 层深的嵌套子查询的地方。性能已经成为那些将返回大型数据集并且可能必须筛选大量记录才能做到这一点的问题。比较少的那些表现很好,但其中一些变得非常糟糕。该数据库是 DB2 并且具有所有必要的索引,因此这不应该成为问题。我想知道如何最好地编写/重写这些查询以执行,因为我不太确定优化器将如何处理它。我显然不能在这里倾倒整个东西,但这里有一个例子:
Select A, B
from TableA
--A series of joins--
WHERE TableA.A IN (
Select C
from TableB
--A few joins--
WHERE TableB.C IN (
Select D from TableC
--More joins and conditionals--
)
)
还有很多条件句贯穿始终,其中绝大多数是简单的相等。你明白了。子查询不向初始查询提供任何数据。它们的存在只是为了过滤结果。我早期遇到的一个问题是后端被编写为包含许多部分查询字符串,这些字符串被组装到最终查询中(由于搜索选项有 100 多种可能的组合,编写查询根本不可行对于每个),这使整个方法有点复杂。我想知道 EXISTS 而不是 IN 是否可能在一个或两个级别上有所帮助,或者另一组连接而不是子查询,或者可能在 TableC 的初始查询之上使用 WITH 等。我肯定希望消除瓶颈并希望人们可能对如何处理这个问题有任何反馈。
我可能还应该补充一点,两个子查询中都有潜在的联合。