15 milyon Hesap kaydım varken SOQL Sorgusunu Nasıl Optimize Edebilirim?
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
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.