我们在 Salesforce 中创建自定义应用程序,这些应用程序构建在 Salesforce 数据表中的客户或交易数据之上。编写高效的查询对于维护这些应用程序的性能并确保我们不会遇到 Salesforce 的限制至关重要。您需要遵循某些优化技术来提高查询效率。本文将阐明这些技术。

关于查询性能

很明显,查询的性能完全取决于生产组织中当前数据的复杂性。您可以编写在一种环境中有效但在不同环境中可能失败的高效查询。因此,了解生产环境中数据的当前状态非常重要。您还应该对生产数据的未来增长有一些了解,以便您可以相应地规划查询。将规划查询作为开发周期的一部分。制定例行程序来重新访问生产环境中的旧查询,以确保这些查询仍然有效。本文还将引导您了解可用于衡量 Salesforce 中查询性能的工具。

优化查询的第一步是在 WHERE 子句过滤器中使用索引字段。

索引

某些字段在 Salesforce 中是开箱即用的索引。编写查询时,请确保使用这些字段作为过滤器,以便优化您的查询。

用于优化查询的字段列表

除了默认的索引字段外,您还可以将自定义字段设置为索引。您需要联系 Salesforce 支持才能执行此操作。请注意,上面列表中的外部 ID 属于自定义索引类别。

如果索引是可行的方法,那么将所有过滤器都设置为索引就可以了吗?答案是不。” Salesforce 为您的查询应用“选择性阈值”,只要您的查询将数据提取到该阈值以下,您的查询就是选择性的或优化的。门槛是什么?

  • 标准索引阈值 前 100 万条记录的 30% 和其余记录的 15%,最大限制为 100 万条记录
  • 自定义索引阈值:前 100 万条记录的 10% 和其余记录的 5%,最大限制为 333,333 条记录

例如,考虑以下查询并假设您有大约 200 万条业务机会记录。

爪哇

 

从机会中选择 ID、名称,其中 RecordTypeId = '1234'

由于您使用的是标准索引,因此您的阈值是 450k (300k + 150k)。如果您的查询返回超过 450k 条记录,则您的查询不是选择性的,Salesforce Optimizer 宁愿进行表扫描。如果您使用自定义索引过滤器,则阈值将为 150k。

查询中的常见错误

  1. 使用 !=NOT – 即使字段已建立索引,使用 !=NOT 也会不要让你的查询有选择性。请改用 IN=
  2. 使用 %wildcards% – 如果您在查询中遇到使用 %wildcards,请退后一步,问问自己 SOSL 是否是更好的选择。
  3. 避免空值 – 考虑以下代码:
爪哇

 

List<机会> oppList = [从机会选择 id, customLookup__c]; list Ids = new List(); for (机会 opp : oppList){ Ids.add(opp.customLookup__c); } List objs = [从 customObject__c 中选择 id,其中 Id 位于:Ids];

如果您有机会使用 customlookup__c=null,您的列表将具有 null 值,并且您对 customObject__c 的查询code> 不会有选择性。要解决此问题,仅当 customLookup__c !=null 时,才将 customLookup__c 添加到 Ids 列表。

4.删除的记录可能会影响查询性能 – 使用 isDeleted = false 或清空回收站以提高查询性能。

检查您的查询性能

有两种方法可以检查查询的性能,而无需实际运行查询。

  1. Salesforce 查询 REST 资源,其中包含 < code>‘解释’ 参数
  2. 来自开发者控制台的查询计划

选择在 REST API 服务 URI 上执行的 HTTP 方法

帮助菜单 -> 首选项 -> 启用查询计划” class=”fr-fic fr-dib lazyload” data-creationdate=”1708131440483″ data-creationdateformatted=”02/17/ 2024 年 12:57 AM” data-id=”17515097″ data-image=”true” data-mimetype=”image/png” data-modificationdate=”null” data-name=”1708131440106.png” data-new=” false” data-size=”148862″ data-sizeformatted=”148.9 kB” data-src=”https://dz2cdn1.dzone.com/storage/temp/17515097-1708131440106.png” data-type=”temp” 数据-url=”https://dz2cdn1.dzone.com/storage/temp/17515097-1708131440106.png” src=”http://www.cheeli.com.cn/wp-content/uploads/2024/02/17515097 -1708131440106.png” style=”width: 808px;”/><br /><img alt=

查询性能属性

当您使用上述两种方法运行查询计划时,您将看到具有以下关键属性的“查询计划”。

  • 基数 – 主要操作类型将返回的估计记录数
  • SObject Cardinality – 查询对象的大概记录数
  • 主要操作类型– Salesforce 将用于优化您的查询的主要操作类型;两种常见的类型是索引和表扫描。
  • relativeCost 或 Cost – 与选择性阈值相比的查询成本;如果成本大于 1,则查询不是选择性的。

请注意,大多数时候您会在回复中找到多个计划。 Salesforce 将使用成本最低的计划。

结论

编写高效的查询对于维护 Salesforce 系统的性能至关重要< /a>.有一些技术可以使查询有效,例如使用索引作为过滤器并将查询结果保持在选择性阈值内。还有一些工具,例如开发者控制台中的查询计划或使用查询 REST 资源中的 explain 参数来衡量查询性能。确保在设计会话中使用这些技术和工具,以便您可以编写选择性查询并确保应用程序的最佳性能。

Comments are closed.