วิธีเพิ่มประสิทธิภาพการสืบค้น SOQL เมื่อฉันมีบันทึกบัญชี 15 ล้านรายการ
ฉันมีกรณีการใช้งานที่ฉันกำลังเปิดโปงบริการ Rest แบบกำหนดเองซึ่งจะยอมรับโทรศัพท์ # เป็นอาร์กิวเมนต์และเปรียบเทียบกับฟิลด์โทรศัพท์ # ห้าช่องในบัญชีและจะส่งคืนระเบียนเดียวที่ตรงกับหมายเลขโทรศัพท์ทั้งห้าหมายเลข ในกรณีหากพบหลายระเบียนควรส่งคืนระเบียนที่สร้างเร็วที่สุด ข้อกังวล / ปัญหาเดียวของฉันคือเมื่อสิ่งนี้นำไปสู่การใช้งานจริงมันจะไม่ทำงาน / จะมีปัญหาด้านประสิทธิภาพเนื่องจากมีบันทึกบัญชี 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];
PS: ฉันถามทีม Biz แล้วว่าเราสามารถมีช่อง # โทรศัพท์เพียงช่องเดียวในขณะเปรียบเทียบ แต่พวกเขายืนกรานกับห้าช่อง
คำตอบ
นี่เป็นกรณีการใช้งานที่สมบูรณ์แบบสำหรับ SOSL แทน คุณทำได้:
FIND :phoneNumber
IN PHONE FIELDS
RETURNING Account(
Id
WHERE RecordType.Name='Person Account'
ORDER BY CreatedDate
LIMIT 1
)
หมายเหตุ: หากฟิลด์ที่กำหนดเองเหล่านั้นเป็นฟิลด์สูตรวิธีนี้จะพลาดเรกคอร์ดเหล่านั้นเนื่องจากฟิลด์สูตรไม่ได้รับการจัดทำดัชนีการค้นหา คุณต้องคัดลอกค่าลงไปในเรกคอร์ดที่กำลังค้นหาด้วยเหตุผลด้านประสิทธิภาพ
คำสั่งนี้จะยังคงเป็นจริงกับ SOQL โดยวิธีการ; คุณต้องเลือกคิวรีซึ่งหมายความว่าไม่ใช้ฟิลด์สูตร ตราบใดที่ช่องทั้งหมดที่กรองแล้วได้รับการจัดทำดัชนีแบบสอบถามเดิมของคุณก็ไม่น่าจะมีปัญหาแม้จะมีปริมาณข้อมูลถึง 15 ล้านรายการก็ตาม