Salesforce SOQL查询长度和效率

Bob*_*rts 2 performance salesforce soql

我试图解决只删除匹配两个条件的行的问题,每个条件都是一个id列表.现在这些ID是成对的,如果要删除的项目有一个,它必须在对中有第二个,所以只使用两个in子句将不起作用.我想出了两个解决方案.

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

IE

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我喜欢第二种选择,因为我只获得了我需要的项目,并且可以将列表放入删除但我知道salesforce有SOQL查询的挂起.第二种选择会受到惩罚吗?是否更好地构建和查询长字符串或获取超过必要的对象和过滤器?

Gre*_*erg 5

通常,您希望尽可能多地将逻辑放入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;
}
Run Code Online (Sandbox Code Playgroud)