การสร้างแผนการดำเนินการใน SQL Server เป็นอย่างไร


13

รับค่าคงที่ดังต่อไปนี้:

  • ฐานข้อมูลเดียวกันที่มีโครงสร้างเดียวกัน (ตารางดัชนี ฯลฯ )
  • ข้อมูลเดียวกัน
  • SQL Server และการกำหนดค่าฮาร์ดแวร์เดียวกัน
  • สถิติเดียวกัน
  • ตัวเลือก SET เดียวกันในไคลเอนต์
  • SQL Server เวอร์ชันเดียวกัน
  • แฟล็กการติดตามเดียวกัน

เมื่อกำหนดค่าคงที่เหล่านี้แล้ว SQL Server จะสร้างแผนเดียวกันสำหรับแบบสอบถามที่กำหนดหรือไม่

ถ้าไม่มีข้อควรพิจารณาอื่น ๆ อีกไหม? นอกจากนี้ยังมีองค์ประกอบของ nondeterminism ที่ต้องพิจารณาด้วยหรือไม่?


มันจะไม่ถูกต้องที่จะพูดแผนเดียวกัน แต่เราสามารถพูดแผนเดียวกัน พร้อมกับปัจจัยภายนอกที่ DBA / นักพัฒนาสามารถควบคุมได้ "อัลกอริธึมการเพิ่มประสิทธิภาพแผนแบบสอบถาม" และ "อัลกอริทึมค่าใช้จ่ายแบบสอบถามภายใน" จะถูกเขียนในโปรแกรมเซิร์ฟเวอร์ SQL เราไม่สามารถควบคุมการบอก "สิ่งที่ต้องเลือก" ในทุกด้าน เราสามารถตั้งค่า env ภายนอกเพื่อเป็นแนวทางในการเลือกเครื่องยนต์ให้ดีที่สุด สำหรับข้อความค้นหาที่ระบุหากเครื่องมือเพิ่มประสิทธิภาพมีแผนดำเนินการสองแผนพร้อมด้วยบอกว่าผลต่างราคา 0.001 จากนั้นฉันเดาว่าจะไม่เกี่ยวข้องกับแผนการดำเนินการที่เลือก
Anup Shah

ฉันไม่คิดว่าคุณควรจะเกี่ยวกับเรื่องนี้ในทางทฤษฎี ฉันทำงาน 25 ปีกับฐานข้อมูลที่แตกต่างกันและเป็นไปได้ที่จะเขียนแบบสอบถามเพื่อให้ทำงานได้ดีขึ้น และบางครั้งมันยากที่จะเข้าใจว่าทำไมมันถึงดีกว่าด้วยวิธีหนึ่งในการเขียนแบบสอบถาม

คำตอบ:


13

เมื่อกำหนดค่าคงที่เหล่านี้แล้ว SQL Server จะสร้างแผนเดียวกันสำหรับแบบสอบถามที่กำหนดหรือไม่ ถ้าไม่มีข้อควรพิจารณาอื่น ๆ อีกไหม? นอกจากนี้ยังมีองค์ประกอบของ nondeterminism ที่ต้องพิจารณาด้วยหรือไม่?

การรวบรวมข้อความค้นหาจะถูกกำหนดเท่าที่ฉันทราบ หนึ่งในเป้าหมายการออกแบบ QO ดั้งเดิมคือควรทำแผนปฏิบัติการในระบบที่แตกต่างกันโดยใช้สำเนาของฐานข้อมูลเท่านั้น มีรายละเอียดย่อยสองสามรอบพารามิเตอร์การกำหนดค่าเช่นจำนวนหน่วยความจำที่มีอยู่และจำนวนของตัวประมวลผลเชิงตรรกะ แต่สิ่งเหล่านี้จะครอบคลุมโดยรายการสิ่งที่คุณจะซิงโครไนซ์

ข้อแม้: นั่นคือความจริงที่มีให้คำว่า 'เดียว' ในรายการของคุณจะนำไปหมายความว่าเหมือนกันทุกประการ ยกตัวอย่างเช่นสถิติ 'เดียว' อาจจะมีอยู่ในทั้งสองระบบ แต่พวกเขาเป็นเพียงตรงเดียวกันหากขั้นตอนแท่งและข้อมูลความหนาแน่นเป็นเหมือนกัน

ที่กล่าวว่ากระบวนการปรับให้เหมาะสมนั้นซับซ้อนมากซึ่งหมายความว่ามันยากที่จะมั่นใจได้ว่าอินพุตทั้งหมดสำหรับกระบวนการกำหนดค่านี้เหมือนกันและสถานะภายในทั้งหมดนั้นคล้ายคลึงกันมากพอที่จะทำให้แน่ใจว่าพา ธ ของรหัสเดียวกันถูกนำมาใช้ผ่านเครื่องมือเพิ่มประสิทธิภาพเฉพาะ การรวบรวม หากแบบสอบถามมีการเข้าถึงภายนอกฐานข้อมูล (ไปยังฐานข้อมูลหรืออินสแตนซ์อื่น) สภาพแวดล้อมเหล่านั้นจะต้องเหมือนกัน

สิ่งหนึ่งที่ฉันจะเพิ่มในรายการของคุณคือการตรวจสอบว่ามีคำแนะนำแผนใด ๆอยู่ในฐานข้อมูลที่สอง


การใช้ฟังก์ชั่นที่ไม่ได้กำหนดไว้อย่างเช่นGETDATE()ในแบบสอบถามอาจหมายถึงคุณได้รับแผนที่แตกต่างเช่นกัน ในขณะที่เครื่องมือเพิ่มประสิทธิภาพหลักไม่ได้ใช้ค่าโดยตรงการประมาณค่า cardinality สามารถ (ดูการประเมินการพับและการแสดงออกอย่างต่อเนื่องในระหว่างการประมาณค่า Cardinality ) ฉันไม่แน่ใจว่าความแตกต่างของคลาสนี้อยู่ในขอบเขตของคำถามหรือไม่เนื่องจากทั้งสองระบบจะสร้างแผนเดียวกันหากดำเนินการในเวลาเดียวกัน (หรือโดยทั่วไปโดยมีตัวแปรอินพุตพารามิเตอร์และค่าฟังก์ชันเดียวกัน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.