จากความรู้ที่ จำกัด ของฉันเกี่ยวกับวิธีรวบรวมแผนแบบสอบถามจัดเก็บและดึงข้อมูลโดยแบบสอบถามฉันเข้าใจว่าแบบสอบถามหลายคำสั่งหรือกระบวนงานที่เก็บไว้จะสร้างแผนแบบสอบถามซึ่งจะถูกเก็บไว้ในแคชแผนแบบสอบถามที่จะใช้โดยแบบสอบถามในการดำเนินการในอนาคต
ฉันคิดว่าแผนนี้ถูกดึงมาจากแคชแผนแบบสอบถามด้วยแฮชคิวรีซึ่งหมายความว่าหากมีการแก้ไขคิวรีและดำเนินการแฮชจะแตกต่างกันและมีการสร้างแผนใหม่เนื่องจากไม่พบแฮชที่ตรงกันในแคชแผนคิวรี
คำถามของฉันคือ: หากผู้ใช้ดำเนินการคำสั่งที่เป็นหนึ่งในงบในแบบสอบถามหลายงบสามารถใช้ส่วนที่เกี่ยวข้องของแผนแบบสอบถามที่มีอยู่แล้วในแคชสำหรับแบบสอบถามหลายงบ? ฉันคาดหวังว่าคำตอบนั้นไม่ใช่เพราะค่าแฮชจะไม่ตรงกัน แต่จะดีกว่าหรือไม่ที่จะแฮชแต่ละคำสั่งในแบบสอบถามแบบหลายคำสั่งเพื่อให้ผู้ใช้สามารถเรียกใช้คำสั่งแต่ละรายการจากแบบสอบถามได้หรือไม่
ฉันคาดหวังว่าจะมีภาวะแทรกซ้อนที่ฉันไม่ได้คำนึงถึง (และนี่คือสิ่งที่ฉันต้องการทราบจริงๆ) แต่ดูเหมือนว่าเราสามารถจัดเก็บ 'แผนคำสั่ง' ที่เหมือนกันในแผนแบบสอบถามจำนวนมากที่ใช้พื้นที่มากขึ้นและใช้มากขึ้น CPU และเวลาในการสร้าง
อาจเป็นเพียงการแสดงความไม่รู้ของฉันว่า
dbid
และobjectid
ทั้งคู่มีis_cache_key=1
ดังนั้นคุณจะไม่ได้รับการนำแผนมาใช้ใหม่ระหว่างวัตถุที่คอมไพล์ต่าง ๆ