优化MS-SQL查询

EBS_EDV

我正在为一个MS-sql查询的性能而苦苦挣扎,必须运行该MS-sql查询才能在我们的ERP系统中创建报告。

希望您可以帮助我进行该查询。

这是查询:

“原始版本”:

SELECT artikel.artikelnummer, artikel.bezeichnung, SUM(positionen.anzahl), artikel.Einheit
FROM artikel, auftrag, positionen 
INNER JOIN auftrag AS auftrag1 ON (auftrag1.auftrag = positionen.auftrag) 
INNER JOIN artikel AS artikel1 ON (positionen.artikel = artikel1.artikel)
WHERE 
artikel.warengruppe = 2
OR artikel.warengruppe = 1234
OR artikel.warengruppe = 1235
OR artikel.warengruppe = 1236
OR artikel.warengruppe = 1237
OR artikel.warengruppe = 1239
OR artikel.warengruppe = 1240
OR artikel.warengruppe = 2139
AND auftrag.lieferscheinnr IS NOT NULL
GROUP BY artikel.artikelnummer, artikel.bezeichnung,artikel.Einheit

“翻译版本”:

SELECT article.articlenr, article.description, SUM(positions.amount), article.unit
FROM article, order, positions
INNER JOIN order AS order1 ON (order1.order = positions.order) 
INNER JOIN article AS article1 ON (positions.article = article1.article)
WHERE 
article.materialgroup = 2
OR article.materialgroup = 1234
OR article.materialgroup = 1235
OR article.materialgroup = 1236
OR article.materialgroup = 1237
OR article.materialgroup = 1239
OR article.materialgroup = 1240
OR article.materialgroup = 2139
AND order.dordernr IS NOT NULL
GROUP BY article.articlenr, article.description,article.unit

我们要计算所有交货单(DO)的墨水量。在“ auftrag”表中,我具有所有的DO号和订单号。在“ positionen”表中,我有几个订单的所有职位,包括正确数量的墨水瓶。在“ artikel”表中,我有所有的文章详细信息,例如描述,瓶子大小等。列“ artikel.warengruppe”包含包含墨水的正确材料组。

现在的问题是表“ auftrag”包含160.000,“ artikel” 155.000,并定位570.000条目。

我在运行1小时后中止了查询。所以我的问题是如何优化查询?

我的问题是我无法更改ER模型。

预先非常感谢您的帮助。我希望你能听懂我cr脚的英语。;)

戈登·利诺夫(Gordon Linoff)

如果where正确地表达了该子句,则性能可能会提高。我会建议:

WHERE artikel.warengruppe in (2, 1234, 1235, 1236, 1237, 1239, 1240, 2139) and
      auftrag.lieferscheinnr IS NOT NULL;

您的逻辑是找到前7个warengruppe值的所有内容。然后它也在寻找2139位置lieferscheinnr IS NOT NULL

其次,您需要修正您的from条款。应该是这样的:

FROM artikel
INNER JOIN auftrag AS auftrag1 ON (auftrag1.auftrag = positionen.auftrag) 
INNER JOIN artikel AS artikel1 ON (positionen.artikel = artikel1.artikel)

只要避免在from子句中使用逗号即可您的查询是对所有表进行大量的笛卡尔乘积运算,然后将表重新加入。这是一项令人难以置信的工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章