首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法获得外部连接或不存在连接在AX 2009中工作

无法获得外部连接或不存在连接在AX 2009中工作
EN

Stack Overflow用户
提问于 2012-08-07 22:35:43
回答 2查看 4.2K关注 0票数 1

我有一个完全空白的自定义表(DatabaseLogFixLog),其中只有一个名为"refRecId“的字段/列。我加入了SysDatabaseLog (日志)。计划是批量更新SysDatabaseLog,当我更新SysDatabaseLog时,我将插入我更新过的行的recId。我的SysDatabaseLog有370万张唱片。我已经尝试过不存在的连接和外部连接,如下所示。我的密码怎么了?两者都完全锁定了我的系统,调试器不会进入循环。

外连接:

代码语言:javascript
复制
updateCounter = 10;
while select forupdate log
    order by CreatedDateTime, RecId
    outer join databaseLogFixLog
    where databaseLogFixLog.RefRecId != log.RecId
{
    counter++;

    if (counter > updateCount)
        break;

    info(strfmt("%1", counter));
}

info(strfmt("Done updating %1", counter));

不存在连接:

代码语言:javascript
复制
updateCounter = 10;
while select forupdate log
    order by CreatedDateTime, RecId
    notexists join databaseLogFixLog
    where databaseLogFixLog.RefRecId == log.RecId
{
    counter++;

    if (counter > updateCount)
        break;

    info(strfmt("%1", counter));
}

info(strfmt("Done updating %1", counter));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-08 09:39:02

你的两个连接不是等价的,你的外部连接是完全错误的。

您的存在将加入将工作,但它将必须排序您的日志记录(370万),女巫将需要一些时间。此外,它还必须检查您的logFixLog记录是否存在(对于370万条记录中的每个记录),您将需要在RefRecId字段上建立一个索引来加快速度。

如果您想要速度,那么删除order by子句。

您也可以尝试添加firstfast关键字,它有时会提供更快的初始结果(但很少与order by结合)。

最后,选择要更新的字段,特别是避免容器字段,因为此字段不与其他字段一起存储。

票数 1
EN

Stack Overflow用户

发布于 2012-08-08 06:39:42

我不认为我会使用"forupdate“关键字循环遍历如此庞大的数据集,而是使用一个表缓冲区循环(日志)和另一个表缓冲区进行更新(logUpdate)。

我可以想象,系统在循环遍历3.7磨记录时挂起,当它运行查询时,您将不得不等待它最终进入while-select。

另外,确保RefRecId在表上有一个索引,这样数据库引擎就不会运行试图在databaseLogFixLog中查找一行的完整表扫描。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11855120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档