ฉันมีตารางที่มีหลายล้านแถวซึ่งฉันต้องเรียกใช้แบบสอบถามบางครั้งบางคราว โดยทั่วไปการสืบค้นแรกจะค่อนข้างช้า (ประมาณ 10 วินาที) และการสืบค้นที่ตามมามักจะเร็วกว่า (ประมาณ 1 วินาที) หลังจากผ่านไปสองสามชั่วโมงวงจรที่ช้า / เร็วจะเริ่มขึ้นอีกครั้ง
ฉันได้ตรวจสอบแผนการดำเนินการของฉันว่าดัชนีที่ต้องการทั้งหมดมีอยู่และใช้อย่างเหมาะสมและฉันถือว่าความแตกต่างของประสิทธิภาพนั้นเกิดจากข้อเท็จจริงที่ว่าดัชนีนั้นอยู่ในหน่วยความจำสำหรับการสืบค้นที่ตามมา (ฉันใช่หรือไม่ สาเหตุที่เป็นไปได้หรือไม่)
ฉันยังใช้แบบสอบถามอื่น ๆ จำนวนมากโดยใช้ดัชนีเช่นกัน แต่แบบสอบถามเหล่านั้นใช้เวลาน้อยลงและประสิทธิภาพการทำงานนั้นสำคัญน้อยลงดังนั้นฉันจึงกังวลว่าดัชนีเหล่านั้นกำลังผลักดัชนีสำคัญออกจากแคชหน่วยความจำ
นอกเหนือจากการแก้ไข 'เพิ่ม RAM เพิ่มเติม' ที่เห็นได้ชัดฉันยังคิดถึงการเขียนสคริปต์คิวรีเพื่อทำงานทุก ๆ ชั่วโมงเพื่อบังคับให้ดัชนีกลับมาอยู่ในหน่วยความจำ
มีวิธีที่สง่างามกว่านี้หรือไม่? เช่นเดียวกับวิธีการบอกใบ้ SQLServer ว่าถ้ามันมีหน่วยความจำเพียงพอที่จะเก็บหนึ่งเดียวดัชนีแคชมันควรจะเป็นอย่างนั้น?
ฉันรู้ว่าโดยปกติแล้วสิ่งที่ดีที่สุดคือการไม่ยุ่งกับ SQLServer ซึ่งเกี่ยวข้องกับสิ่งต่าง ๆ แต่ลักษณะที่ผิดปกติของข้อความค้นหาของฉัน (ทำงานน้อยมาก แต่ไม่ค่อยสำคัญเวลา) ทำให้ฉันเชื่อว่ามันสมเหตุสมผล .
ฉันยังอยากรู้ว่าถ้ามีวิธีที่จะรู้ว่าดัชนีใดถูกแคชในหน่วยความจำในเวลาที่กำหนด?