Dynamics crm 使用expand的Dynamics CRM 365 Odata查询的性能较差

Dynamics crm 使用expand的Dynamics CRM 365 Odata查询的性能较差,dynamics-crm,odata,crm,microsoft-dynamics,dynamics-crm-webapi,Dynamics Crm,Odata,Crm,Microsoft Dynamics,Dynamics Crm Webapi,我们正在查询具有odata字符串的实体,如: https://myinstance.crm99.dynamics.com/api/data/v9.0/myentity?$expand=my_field1_ref($select=field1,field2),my_field2_ref,my_field3_ref($select=field1, field2, field3),...&$orderby=createdon+desc&$filter=_my_entity2_ref_v

我们正在查询具有odata字符串的实体,如:

https://myinstance.crm99.dynamics.com/api/data/v9.0/myentity?$expand=my_field1_ref($select=field1,field2),my_field2_ref,my_field3_ref($select=field1, field2, field3),...&$orderby=createdon+desc&$filter=_my_entity2_ref_value+eq+696f0125-d1cf-e813-a95f-000d3ab490f3+and+statecode+ne+1
这个查询总共有7个连接,返回大约1000行。 在chrome中下载时,执行时间分别为16秒和190秒。它正在使用“
myentity
”中的所有字段

在展开之前添加
$select
部分时,只返回列出的字段,执行时间减少到11秒,在chrome中下载只需48秒

最后,我更改了查询,只返回ID,而不返回连接。然后,包括下载在内的执行时间减少到170ms


有人能解释一下为什么加入的表现这么差吗?由于添加联接是SQL server中的标准,使用联接似乎很明显,因为它应该很快。

一些在线搜索结果来自SAP support、ASP.NET core等,其中谈到了相同的OData扩展性能限制。这意味着这个问题不仅限于Dynamics odata web api。与SQL连接不同,使用expand for Join entities的查询将组成更多的子查询&因此性能降低

我建议您根据所需的相同条件构建FetchXML查询&可以使用webapi端点进行查询。由于本机平台支持,这应该是有效的

https://[Organization URI]/api/data/v9.0/contacts?fetchXml=

您可以在CRM&中组合高级查找查询。或者在XrmToolBox fetchxml builder中编写。

一些在线搜索结果来自SAP支持、ASP.NET core等,其中讨论了相同的OData扩展性能限制。这意味着这个问题不仅限于Dynamics odata web api。与SQL连接不同,使用expand for Join entities的查询将组成更多的子查询&因此性能降低

我建议您根据所需的相同条件构建FetchXML查询&可以使用webapi端点进行查询。由于本机平台支持,这应该是有效的

https://[Organization URI]/api/data/v9.0/contacts?fetchXml=

您可以在CRM&中组合高级查找查询。或者在XrmToolBox fetchxml builder中编写。

这更像是一个Odata问题-因为“连接”似乎正在创建多个子查询..我再次检查了查询-总共有8个连接实体,其中3个返回所有列。因此,当限制链接实体中的列数较少时,速度可能会快得多。这更像是Odata问题-因为“连接”似乎正在创建多个子查询..我再次检查了查询-总共有8个连接实体,其中3个返回所有列。因此,当限制链接实体中的列数较少时,可能会快得多。当使用fetch XML builder时,查询的执行速度比原始查询快得多。当使用fetch XML builder时,查询的执行速度比原始查询快得多。
https://[Organization URI]/api/data/v9.0/contacts?fetchXml=<encoded query>