dynamics-ax-2009 - 添加 Outer Join DataSource 时的表单性能

标签 dynamics-ax-2009 x++ axapta ax

我有一个具有以下数据源设置的自定义表单;

SalesTable
SalesLine (SalesTable - Inner Join)
InventTable (SalesLine - Inner Join)
InventDim (SalesLine - Inner Join)

...没有任何性能问题。

当我添加以下内容时;

InventHazardousGroup (InventTable - Outer Join)

...我发现在我们的开发环境中没有性能问题,但是在生产环境中查询非常慢,这意味着加载表单需要很长时间。

SQL 语句跟踪日志在两种环境中产生了以下输出;

(由于字段列表很长,所以我用 etc 结束了字段列表);

SELECT A.SALESID,A.SALESNAME,A.RESERVATION,A.CUSTACCOUNT,A.INVOICEACCOUNT,A.DELIVERYDATE,A.DELIVERYADDRESS,A.URL,A.PURCHORDERFORMNUM,A.SALESTAKER,A.SALESGROUP,A.FREIGHTSLIPTYPE,A.DOCUMENTSTATUS,A.INTERCOMPANYORIGINALSALESID,etc
FROM  {OJ INVENTTABLE C LEFT OUTER JOIN INVENTHAZARDOUSGROUP E ON ((E.DATAAREAID=?)
AND (C.HAZARDOUSGROUPID=E.HAZARDOUSGROUPID))},SALESTABLE A,SALESLINE B,INVENTDIM D
WHERE ((A.DATAAREAID=?)
AND (A.SALESTYPE=?))
AND ((B.DATAAREAID=?)
AND (A.SALESID=B.SALESID))
AND ((C.DATAAREAID=?)
AND (B.ITEMID=C.ITEMID))
AND ((D.DATAAREAID=?)
AND (B.INVENTDIMID=D.INVENTDIMID))
ORDER BY A.DATAAREAID,A.SALESID OPTION(FAST 1)

为什么这在一个环境中应该如此缓慢而在另一个环境中却不是?我在开发环境中测试的数据是最近的,大约 1 个月大。我在另一家公司的生产环境中遇到了同样的性能问题。

最佳答案

我以前遇到过这个问题,我认为它与外部连接没有任何关系。这很可能是因为表单在生产和开发中生成的查询数量。 SQL 在使用时尝试缓存查询,而 AX 喜欢将对象作为变量传递到 SQL 中。最有可能的是,您在生产中有一个糟糕的缓存计划,然后被所有用户使用。我建议使用 Force Literals .我在几个地方很少使用它,它对性能产生了重大影响。

关于dynamics-ax-2009 - 添加 Outer Join DataSource 时的表单性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10616075/

相关文章:

axapta - 一次上传多个文件

axapta - 如何在 Dynamics AX 中选择单选按钮(通过代码)?

axapta - 通过管理进行 AX 2009 导入/导出与数据刷新的表保留

axapta - AX 2009/2012 中的基本搜索/查找功能 (Ctrl+F) 无法正常工作...如何修复?

file - 如何从代码中删除文件?

text-files - 如何使用 Microsoft Dynamics AX 写入 txt 文件?

dynamics-ax-2009 - 无法通过 UI 正确设置 Dynamics AX 强制枚举字段

xml - 如何强制将 XML 编码为 UTF-8?

dynamics-ax-2009 - 导出带或不带 ID 的 AOT 对象 (XPO)?

axapta - AX 2009 的正确部署流程是什么