【问题标题】:Salesforce SOQL query length and efficiencySalesforce SOQL 查询长度和效率
【发布时间】:2012-07-23 12:04:49
【问题描述】:

我正在尝试解决仅删除符合两个条件的行的问题,每个条件都是一个 id 列表。现在这些 Id 是成对出现的,如果要删除的项目有一个,那么它必须有第二个,所以只使用两个 in 子句是行不通的。我想出了两个解决方案。

1) 使用两个 in 子句,然后遍历项目并检查有问题的两个 id 是否出现在正确的配对中。

I.E.

for(Object__c obj : [SELECT Id FROM Object__c WHERE Relation1__c in :idlist1 AND Relation2__c in:idlist2]){
    if(preConstructedPairingsAsString.contains(''+obj.Relation1__c+obj.Relation2__c)){
        listToDelete.add(obj);
    }
}

2) 循环遍历 id 并构建一个公认的长查询。

我喜欢第二个选择,因为我只得到我需要的项目,并且可以将列表放入删除,但我知道 salesforce 与 SOQL 查询挂断。第二个选项有惩罚吗?是构建和查询长字符串更好,还是获取比必要更多的对象并过滤?

【问题讨论】:

  • 您能否给我们一个使用选项 1 运行的 SOQL 查询示例?
  • @JCD,我添加了一个示例。这不是真正的代码,但我认为它应该明白这一点。

标签: performance salesforce soql


【解决方案1】:

一般来说,您希望将尽可能多的逻辑放入 soql 查询中,因为这不会使用任何脚本语句,而且它们的执行速度比您的代码快。但是,soql 查询有 10k 个字符的限制(可以提高到 20k),因此根据我的信封背面计算,在达到该限制之前,您只能输入 250 个左右的 id 对。

我会选择选项 1,或者如果您真的关心效率,您可以在对象上创建一个公式字段,将 id 配对并对其进行过滤。

formula: relation1__c + '-' + relation2__c

for(list<Object__c> objs : [SELECT Id FROM Object__c WHERE formula__c in :idpairs]){
    delete objs;
}

【讨论】:

  • 嗯,不,我认为这根本行不通。
  • 如果你要创建一个公式字段,请确保你使用 CASESAFEID 函数,公式中的 id 是 15 个字符,这已经抓住了我过去
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2021-02-06
相关资源
最近更新 更多