我有下面的 SQL,它有一个不可接受的响应时间。
这与 RPG 程序中的 DECLARE、PREPARE、OPEN 和 FETCH 一起使用,其中选定的字段放置在主变量中,填充到数组中,然后按 [降序] 排序以显示子文件。
正在使用的 2 个表根本没有键控 (PF),它们在下面连接,如 WHERE 子句所示。
Select DISTINCT B.Fld1, B.Fld2, B.Fld3, B.Fld4,
A.Fld1, A.Fld2, A.Fld3, A.Fld4, A.Fld5, A.Fld6, A.Fld7, A.Fld8, A.Fld9
From TableA A, TableB B
Where A.Fld2 = B.Fld5
And A.Fld1 = B.Fld6 || B.Fld7
And ((A.Fld7 BETWEEN <from-date> and <to-date>)
Or (A.Fld5 BETWEEN <from-date> and <to-date>))
我已将其重写为“真正的”左连接,没有任何改进。
我还使用了 2 个可用的 LF,其中 A.Fld2 和 A.Fld1 作为键,略有改进。
我觉得递归 SQL 可以解决问题,但我缺乏将其淘汰的经验。我从每个表中选择了自己创建和运行的选项。我只是不知道如何将它们组合成一只美丽的野兽以获得我想要的结果。
这个结果集大约有 10,000 行一周的时间段,我需要看到 2 周。
TableA 中有近 6,000,000 条记录,TableB 中有大约 160,000 条记录。
现在的逻辑是
- 在上述 SQL 之前运行一个简单的 SQL。
- 游标通过记录并填充数组
- 运行上面的 SQL。
- 游标通过记录并附加到同一个数组
- 对数组进行排序并使用它来填充子文件。
在调试中,我验证了上面的 SQL 是问题的核心。
事实是我有 3 个文件,我相信可以将它们加入 1 个结果表以构建子文件。如果我可以通过上面的查询,那么“我认为我可以”处理加入另一个文件。
我的猜测是那里有人可以“鞭打这个”!我曾经和他一起工作过!
这不是 RPG,我质疑系统。我以前在 RPG 中写过一些这样的 SQL。问题是其他人编写了 SQL。: (