Apex 查询异常

问题描述 投票:0回答:1

我在生产中遇到一个问题,抛出以下异常:

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'])

我尝试了一些事情:

  • 使用索引过滤器使查询更具选择性。
  • 检查查询返回的记录数是否超过调控器限制(没有)。
  • 调查了潜在的查找数据倾斜问题,但每个对象的查找次数远低于 10,000。

问题:

  • 有什么事情让您觉得是一个明显的问题吗?
  • 如何使该查询更具选择性?
  • 我还应该探索其他注意事项或方法来解决此问题吗?

任何见解或指导将不胜感激。

首次发生系统异常时的图像:

salesforce apex
1个回答
0
投票

它们是真正的查找字段或公式吗?查找/主详细信息应该自动索引,除此之外您无能为力。

什么作为绑定变量传递?一些真实值或空值?如果您通过普通 API 运行匹配查询(没有绑定变量,真正的

WHERE Contract_Product__c IN ('a01...', 'a01...')
- 您会得到多少行。如果您知道如何使用 查询计划

,则会加分)

班级是否标记为

with sharing
?您可以添加到查询中的任何其他过滤器吗?将其卸载到异步操作(@future、可排队甚至批处理作业?)

© www.soinside.com 2019 - 2024. All rights reserved.