Dynamics crm 使用expand的Dynamics CRM 365 Odata查询的性能较差
我们正在查询具有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
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>