15 milyon Hesap kaydım varken SOQL Sorgusunu Nasıl Optimize Edebilirim?

Aug 15 2020

Telefon numarasını bağımsız değişken olarak kabul eden ve Hesap'taki beş telefon # alanıyla karşılaştıran ve beş telefondan biriyle eşleşen tek kaydı döndürecek özel bir Rest hizmetini ortaya koyduğum bir kullanım durumum var. Birden fazla kayıt bulunursa, en erken oluşturulan kayıt iade edilmelidir. Tek endişem / sorunum, bu üretime gittiğinde işe yaramayacak / 15 milyon Hesap kaydı olduğu için bir performans sorunu olacak. Muhtemelen alanları dizine ekleyebilirim, ancak kayıt sayısı çok yüksek olduğunda bu gerçekten yardımcı olur mu? Bu SOQL'i optimize etmek için herhangi bir öneri / yardımı gerçekten takdir ediyorum.

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];

Not: Karşılaştırma sırasında yalnızca bir telefon numaramız olup olamayacağını Biz ekibine zaten sordum. Ancak beş alan konusunda kararlılar.

Yanıtlar

3 sfdcfox Aug 15 2020 at 19:51

Bu, bunun yerine SOSL için mükemmel bir kullanım durumudur. Yapabilirsin:

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

Not: Bu özel alanlardan herhangi biri formül alanları ise, formül alanları arama dizini oluşturulmadığından bu yaklaşım bu kayıtları gözden kaçıracaktır. Performans nedenleriyle değerleri gerçekten aranan kayda kopyalamanız gerekir.

Bu ifade, bu arada, SOQL için hala geçerli olacaktır; sorguyu seçici yapmanız gerekir, bu formül alanlarını kullanmamanız anlamına gelir. Filtrelenen tüm alanlar dizine eklendiği sürece, orijinal sorgunuz 15 milyon veri hacmi kaydında bile sorun olmamalıdır.