Come ottimizzare la query SOQL quando ho 15 milioni di record di account?

Aug 15 2020

Ho un caso d'uso in cui sto esponendo un servizio Rest personalizzato che accetterebbe il numero di telefono come argomento e lo confronterebbe con i cinque campi del numero di telefono su Account e restituirebbe il singolo record corrispondente a uno dei cinque numeri di telefono. Nel caso in cui vengano trovati più record, deve essere restituito il primo record creato. La mia unica preoccupazione/problema è quando questo va in produzione, non funzionerà/ci sarà un problema di prestazioni poiché ci sono 15 milioni di record di account. Probabilmente posso indicizzare i campi, ma sarà davvero d'aiuto quando il conteggio dei record è così alto? Gradirei davvero qualsiasi suggerimento/aiuto per ottimizzare questo 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];

PS: ho già chiesto al team di Biz se possiamo avere un solo campo numero di telefono durante il confronto. Ma sono irremovibili con cinque campi.

Risposte

3 sfdcfox Aug 15 2020 at 19:51

Questo è invece il caso d'uso perfetto per SOSL. Tu puoi fare:

FIND :phoneNumber 
IN PHONE FIELDS
RETURNING Account(
  Id 
  WHERE RecordType.Name='Person Account'
  ORDER BY CreatedDate
  LIMIT 1
)

Nota: se uno qualsiasi di questi campi personalizzati è un campo formula, questo approccio mancherà quei record, poiché i campi formula non sono indicizzati per la ricerca. È necessario copiare effettivamente i valori nel record da cercare per motivi di prestazioni.

Questa affermazione sarebbe ancora vera con SOQL, tra l'altro; è necessario rendere la query selettiva, il che significa non utilizzare i campi formula. Finché tutti i campi filtrati sono indicizzati, la tua query originale non dovrebbe essere un problema, anche con 15 milioni di record di volume di dati.