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查询的挂起.第二种选择会受到惩罚吗?是否更好地构建和查询长字符串或获取超过必要的对象和过滤器?
通常,您希望尽可能多地将逻辑放入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)
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |