Salesforce SOQL查询长度和效率

时间:2012-07-23 12:04:50

标签: performance salesforce soql

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

1)使用两个in子句,然后遍历这些项目并检查相关的两个ID是否出现在正确的配对中。

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 个答案:

答案 0 :(得分: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;
}