我正在为一个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脚的英语。;)
如果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] 删除。
我来说两句