CustTableListPage过滤太慢

CustTableListPage filtering is too slow

当我尝试过滤 CustTableListPage 上的 CustAccount 字段时,过滤时间太长。在其他领域没有延迟。我正在尝试过滤部分帐号,如“*123”。 我已经为 custtable 重新编制索引并更新了静态数据,但根本没有明显差异。 当我在视图中添加列表页的查询时,它通常像其他字段一样过滤 custAccount 字段。 有什么建议吗? 编辑: 我们的版本是 AX 2012 r2 cu8,不是每个用户都会遇到的基于用户的问题,Interaction class 有一些 custimizations 但只是为了设置一些按钮 enable/disable 道具。等等...我试图查看查询执行,但我发现不清楚。像 FETCH_API_CURSOR_000000..x

记录下这次执行的痕迹,找出瓶颈所在。

请记住,必须谨慎使用通配符(例如 *)。使用以通配符开头的过滤器字符串会破坏所有性能,因为无法使用 SQL 索引 .

末尾使用通配符

假设您有一本字典,并且必须列出 starting 和 'Foo' 的所有单词。您可以跳过 'F' 之前的所有条目,然后跳过 'Fo' 之前的所有条目,然后跳过 'Foo' 之前的所有条目,然后从那里开始您的结果列表。

类似地,要求底层 SQL 引擎列出所有 CustAccount 条目 starting with '123' (= filter string '123*') 允许使用索引CustAccount 快速跳转到相关数据。

开头使用通配符

想象一下,您仍然拥有那本词典,并且必须列出所有单词 ending 和 'ing'。您别无选择,只能浏览 整个 词典并检查每个单词的结尾(由于按字母顺序排列)。

这解释了为什么要求 SQL 引擎列出所有 CustAccount 条目 ending with '123' (= filter string '*123') 意味着 all 必须调查 CustAccount 值。因此 AOS 循环遍历所有条目并使用 SQL 游标来执行此操作。那就是您在 SQL 级别上看到的 FETCH_API_CURSOR 语句。

可能的解决方案

  1. 教育您的最终用户,在过滤器字符串的开头使用通配符在大 table.
  2. 上总是很慢
  3. 加强 SQL 服务器硬件/分配的资源(更快 CPU、更多 RAM、更快的磁盘……)。
  4. 在 CustAccount 上创建全文索引(不是这个索引的粉丝,应该彻底调查性能影响)。

我已经解决了问题。 CustTableListPage 查询对 DirPartyTable.Name 字段进行了排序。当我删除此排序时,使用通配符进行过滤就像一个魅力。