1,500 만 개의 계정 레코드가있을 때 SOQL 쿼리를 최적화하는 방법은 무엇입니까?
phone #을 인수로 받아들이고 Account의 5 개의 phone # 필드와 비교하고 5 개의 phone # 중 하나와 일치하는 단일 레코드를 반환하는 사용자 지정 Rest 서비스를 노출하는 사용 사례가 있습니다. 여러 레코드가 발견되는 경우 가장 먼저 생성 된 레코드를 반환해야합니다. 내 유일한 관심사 / 문제는 이것이 프로덕션으로 이동하면 작동하지 않거나 1,500 만 계정 레코드가 있으므로 성능 문제가 있다는 것입니다. 필드를 인덱싱 할 수 있지만 레코드 수가 너무 많을 때 정말 도움이 될까요? 이 SOQL을 최적화하기위한 제안 / 도움이 정말 감사합니다.
SOQL :
[SELECT Id
FROM Account
WHERE RecordType=’Person Account’
AND (Parent_Phone_Number__c= :phoneNo OR Student_Phone_Number__c= :phoneNo OR
Alternate_Number_1__c= :phoneNo OR Alternate_Number_2__c= :phoneNo OR
Alternate_Number_3__c= :phoneNo)
ORDER BY CreatedDate DESC
LIMIT 1];
추신 : 나는 이미 Biz 팀에 비교하는 동안 하나의 phone # 필드 만 가질 수 있는지 물었습니다. 그러나 그들은 다섯 가지 분야에 단호합니다.
답변
3 sfdcfox
이것은 SOSL의 완벽한 사용 사례입니다. 넌 할 수있어:
FIND :phoneNumber
IN PHONE FIELDS
RETURNING Account(
Id
WHERE RecordType.Name='Person Account'
ORDER BY CreatedDate
LIMIT 1
)
참고 : 이러한 사용자 정의 필드가 수식 필드 인 경우 수식 필드가 검색 인덱싱되지 않으므로이 방법은 해당 레코드를 누락합니다. 성능상의 이유로 검색중인 레코드에 값을 실제로 복사해야합니다.
그런데이 진술은 SOQL에서도 여전히 사실입니다. 쿼리를 선택적으로 만들어야합니다. 이는 수식 필드를 사용하지 않음을 의미합니다. 필터링 된 모든 필드가 인덱싱되는 한 1500 만 개의 데이터 볼륨 레코드에서도 원래 쿼리는 문제가되지 않습니다.