15 मिलियन खाता रिकॉर्ड होने पर SOQL क्वेरी का अनुकूलन कैसे करें?

Aug 15 2020

मेरे पास एक उपयोग का मामला है जहां मैं एक कस्टम रेस्ट सेवा का खुलासा कर रहा हूं जो एक तर्क के रूप में # फोन को स्वीकार करेगा और खाता पर पांच फोन # फ़ील्ड के साथ तुलना करेगा और पांच रिकॉर्ड # फोन में से किसी एक से मेल करेगा। मामले में, यदि कई रिकॉर्ड पाए जाते हैं, तो जल्द से जल्द बनाया गया रिकॉर्ड वापस किया जाना चाहिए। मेरी एकमात्र चिंता / समस्या यह है कि जब यह उत्पादन में जाता है, तो यह काम नहीं करेगा / एक प्रदर्शन समस्या होगी क्योंकि इसमें 15 मिलियन खाता रिकॉर्ड हैं। मैं शायद खेतों को अनुक्रमित कर सकता हूं, लेकिन क्या रिकॉर्ड की गिनती इतनी अधिक होने पर वास्तव में मदद मिलेगी? मैं वास्तव में इस 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];

पुनश्च: मैंने पहले से ही बिज़ टीम से पूछा था कि क्या तुलना करते समय हमारे पास केवल एक फोन # फ़ील्ड हो सकता है। लेकिन वे पाँच क्षेत्रों से युक्त हैं।

जवाब

3 sfdcfox Aug 15 2020 at 19:51

इसके बजाय, SOSL के लिए यह सही उपयोग मामला है। तुम कर सकते हो:

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

नोट: यदि उन कस्टम फ़ील्ड्स में से कोई फ़ार्मूला फ़ील्ड्स हैं, तो यह दृष्टिकोण उन रिकॉर्ड्स को याद करेगा, क्योंकि सूत्र फ़ील्ड्स अनुक्रमणित खोज नहीं हैं। आपको वास्तव में प्रदर्शन कारणों के लिए खोजे जा रहे मान को रिकॉर्ड में कॉपी करना होगा।

यह कथन SOQL के साथ अभी भी सही होगा; आपको क्वेरी को चयनात्मक बनाने की आवश्यकता है, जिसका अर्थ है कि सूत्र फ़ील्ड का उपयोग नहीं करना। जब तक फ़िल्टर किए गए सभी फ़ील्ड अनुक्रमित किए जाते हैं, तब तक आपकी मूल क्वेरी को समस्या नहीं होनी चाहिए, यहां तक ​​कि डेटा वॉल्यूम के 15 मिलियन रिकॉर्ड भी।