我在生产中遇到一个问题,抛出以下异常:
System.QueryException: Non-selective query against large object type (more than 1000000 rows). Consider an indexed filter...
有问题的代码行位于触发器处理程序类中:
for (Order_Line_Item__c oli : [SELECT id, Product_Code__c, Stock_Location__c, Contract_Product__r.Product__c FROM Order_Line_Item__c WHERE Contract_Product__c IN :cpIDSet AND Stock_Location__c IN :stockLocationSet AND Status__c = 'Open'])
我尝试了一些事情:
问题:
任何见解或指导将不胜感激。
它们是真正的查找字段或公式吗?查找/主详细信息应该自动索引,除此之外您无能为力。
什么作为绑定变量传递?一些真实值或空值?如果您通过普通 API 运行匹配查询(没有绑定变量,真正的
WHERE Contract_Product__c IN ('a01...', 'a01...')
- 您会得到多少行。如果您知道如何使用 查询计划,则会加分)
班级是否标记为
with sharing
?您可以添加到查询中的任何其他过滤器吗?将其卸载到异步操作(@future、可排队甚至批处理作业?)