LEFT JOIN 正在终止我的查询 - 如何加快速度?

LEFT JOIN is killing my query - how to speed up?

我有两个 table:

  1. 当某件事被记录为“完成”时在我们的系统中创建的文件列表(报价和发票)。

    BELEG_ART BELEG_NR DATUM BELEG_TYPE
    160 337691 11.01.2021 Invoice
    10 195475 04.01.2021 Offer
    20 195444 04.01.2021 Confirmation
  2. 包含商品信息和文档信息的交易(销售等)列表

    ANUMMER KDNR NAME1 REC_LIST
    181557 59301205 Fred 332240
    195973 59306391 John 338225
    189661 59304599 Steve 335495
    189718 49302475 Ed
    196483 59303491 Mark 338204
    190021 49302595 Jones

您可以看到报价和确认...它们以“1”开头。带“3”的发票。

我需要对所有内容进行 link 编辑并用带有“1”的 ANUMMER 进行标识。后面我会根据这个数拉其他table,所以这是我的临界点。

问题是 - 在文件 table 中,当您看到发票时,您看不到 ANUMMER。你只看到“3”。

所以,我创建了一个连接,如下所示,将所有内容整合在一起。

SELECT
DAB700.BELEG_ART,DAB700.BELEG_NR,DAB700.DATUM,DAB700.BUCH_DATUM,

case // rename the documents to something more meaningful
when DAB700.BELEG_ART = 10 then 'Angebote'
when DAB700.BELEG_ART = 20 then 'Auftrag'
when DAB700.BELEG_ART = 60 then 'Lieferschein'
when DAB700.BELEG_ART = 160 then 'Rechnung'
else 'not defined'
end as "BELEG_TYPE",
DAB050.ANUMMER,

case // if the document is an offer, then copy it to order_number. If it's a invoice, copy that number to order_number.
when DAB700.BELEG_ART = 10 then DAB700.BELEG_NR
when DAB700.BELEG_ART = 160 then DAB050.ANUMMER
else 'NA'
end as "order_number"

FROM "DAB700.ADT" DAB700

// if the document is an invoice, then join to the table DAB050 and reference the same key field REC_LIST.
left join "DAB050.ADT" DAB050 on
Case
When DAB700.BELEG_ART = 160 then DAB700.BELEG_NR = DAB050.REC_LIST
 End

WHERE (DAB700.DATUM={d '2021-01-12'})

所以 - 对于我的问题和问题:当 运行 这个连接查询时,它比我想要的要慢得多(即使是小数据集)。有没有办法重组它,让它更快?

长话短说 - 简化:

感谢您的帮助

问题是连接条件不可优化,因为1.它是一个复杂的表达式,2.它涉及一个memo/clob列(REC_LIST可能是基于你的其他的备忘录题)。这意味着必须为 DAB700 和 DAB050 中的每个行组合评估联合条件。

我觉得join条件可以简化为:

DAB700.BELEG_ART = 160 并且 DAB700.BELEG_NR = DAB050.REC_LIST

不需要大小写,因为默认大小写为 null 或 false。这将减少 DAB700 中参与连接的行数。但是,如果 REC_LIST 是 MEMO 或 CLOB 数据类型,连接的第二部分仍然不是最优的。

在任何情况下,我还建议检查 REC_LIST 是否应该是一个固定长度的字符串列(CHAR、NCHAR、VARCHAR 或 NVARCHAR)而不是 MEMO,它不能被索引,因此对优化。