ขั้นตอนการดำเนินการตามแผน
แต่ละขั้นตอนของแผนการดำเนินการจะส่งคืนชุดแถวที่ใช้ในขั้นตอนถัดไปหรือในขั้นตอนสุดท้ายจะส่งคืนให้กับผู้ใช้หรือแอปพลิเคชันที่ออกคำสั่ง SQL ชุดของแถวที่ส่งคืนโดยแต่ละขั้นตอนเรียกว่าแหล่งที่มาของแถว รูปที่ 5-1 แผนภาพต้นไม้แสดงการไหลของข้อมูลจากการเดินหนึ่งไปยังอีกการเดินหนึ่ง การกำหนดหมายเลขของแต่ละขั้นตอนสะท้อนถึงลำดับขั้นตอนที่แสดงเมื่อคุณดูแผนการดำเนินการ (จะมีการอธิบายวิธีดูแผนการดำเนินการโดยย่อ) โดยทั่วไปนี่ไม่ใช่ลำดับในการดำเนินการแต่ละขั้นตอน แต่ละขั้นตอนของแผนการดำเนินการจะดึงแถวจากฐานข้อมูลหรือรับข้อมูลแถวเป็นอินพุตจากแหล่งที่มาของแถวตั้งแต่หนึ่งแหล่งขึ้นไป:
ขั้นตอนที่ระบุโดยกล่องสีแดงจะดึงข้อมูลจากไฟล์ข้อมูลในฐานข้อมูล ขั้นตอนนี้เรียกว่าเส้นทางการเข้าถึงที่สามารถใช้ใน Oracle ได้จะมีการแนะนำโดยละเอียดในภายหลัง:
ขั้นตอนที่ 3 และ 6 อ่านแถวทั้งหมดจากตาราง EMP และตาราง SALGRADE ตามลำดับ
ขั้นตอนที่ 5 ค้นหาค่า DEPTNO แต่ละค่าที่ส่งคืนโดยขั้นตอนที่ 3 ในดัชนี PK_DEPTNO ค้นหา ROWID ของแถวเหล่านั้นที่เกี่ยวข้องกับตาราง DEPT
ขั้นตอนที่ 4 ดึงข้อมูลจากตาราง DEPT แถวเหล่านั้นที่มีการส่งคืน ROWID ในขั้นตอนที่ 5
ขั้นตอนที่ระบุโดยกล่องข้อความสีดำจะดำเนินการกับแหล่งที่มาของแถว เช่น การเชื่อมโยง การเรียงลำดับ หรือการกรองระหว่าง 2 ตาราง จะมีการแนะนำโดยละเอียดในภายหลัง:
ขั้นตอนที่ 2 ดำเนินการวนซ้ำซ้อน (เทียบเท่ากับการวนซ้ำซ้อนในคำสั่ง C) รับแหล่งที่มาของแถวจากขั้นตอนที่ 3 และ 4 และเปรียบเทียบแต่ละแถวจากแหล่งที่มาในขั้นตอนที่ 3 กับแหล่งที่มาของแถวในขั้นตอนที่ 4 แถวที่สอดคล้องกันจะถูกต่อเข้าด้วยกันและ แถวผลลัพธ์จะถูกส่งกลับไปยังขั้นตอนที่ 1
ขั้นตอนที่ 1 เสร็จสิ้นการดำเนินการตัวกรอง ได้รับแหล่งที่มาของแถวจากขั้นตอนที่ 2 และ 6 ตัดแถวเหล่านั้นออกจากขั้นตอนที่ 2 ที่มีแถวที่สอดคล้องกันในขั้นตอนที่ 6 และส่งกลับแถวที่เหลือจากขั้นตอนที่ 2 ไปยังผู้ใช้หรือแอปพลิเคชัน
ดำเนินการตามลำดับขั้นตอนของแผนปฏิบัติการ
ขั้นตอนในแผนการดำเนินการไม่ได้ถูกนำไปใช้ตามลำดับที่มีการกำหนดหมายเลข: Oracle จะใช้ขั้นตอนเหล่านั้นที่ปรากฏเป็นใบไม้ในกราฟโครงสร้างต้นไม้ของรูปที่ 5-1 ก่อน (ตัวอย่างเช่น ขั้นตอนที่ 3, 5 และ 6) แถวที่ส่งคืนโดยแต่ละขั้นตอนจะเรียกว่าแหล่งที่มาของแถวของขั้นตอนถัดไป ออราเคิลจึงใช้ขั้นตอนหลัก
ตัวอย่างเช่น ในการดำเนินการคำสั่งในรูปที่ 5-1 ออราเคิลจะใช้ขั้นตอนเหล่านี้ตามลำดับต่อไปนี้:
ขั้นแรก Oracle จะใช้ขั้นตอนที่ 3 และส่งคืนแถวผลลัพธ์ไปยังขั้นตอนที่ 2 ทีละแถว
สำหรับแต่ละแถวที่ส่งคืนในขั้นตอนที่ 3 Oracle จะใช้ขั้นตอนเหล่านี้:
-- Oracle ดำเนินการขั้นตอนที่ 5 และส่งคืน ROWID ผลลัพธ์เป็นขั้นตอนที่ 4
-- Oracle ดำเนินการขั้นตอนที่ 4 และส่งคืนแถวผลลัพธ์เป็นขั้นตอนที่ 2
-- Oracle ดำเนินการขั้นตอนที่ 2 และจะยอมรับแถวจากขั้นตอนที่ 3 และแถวจากขั้นตอนที่ 4 และส่งคืน
ให้บรรทัดที่ 1
-- Oracle ดำเนินการขั้นตอนที่ 6 หากมีแถวผลลัพธ์ ให้กลับไปที่ขั้นตอนที่ 1
-- Oracle ดำเนินการขั้นตอนที่ 1 หากแถวถูกส่งคืนจากขั้นตอนที่ 6 Oracle จะส่งคืนแถวจากขั้นตอนที่ 2 ถึง
ผู้ใช้ที่ออกคำสั่ง SQL
โปรดทราบว่า Oracle ดำเนินการขั้นตอนที่ 5, 4, 2 และ 6 หนึ่งครั้งสำหรับแต่ละแถวที่ส่งคืนตามขั้นตอนที่ 3 ขั้นตอนหลักหลายขั้นตอนต้องการเพียงแถวเดียวจากขั้นตอนรองก่อนจึงจะสามารถดำเนินการได้ สำหรับขั้นตอนหลักดังกล่าว ขั้นตอนหลัก (และอาจเป็นส่วนที่เหลือของแผนการดำเนินการ) จะถูกนำไปใช้ทันทีที่มีการส่งคืนแถวเดียวจากขั้นตอนรอง หากสามารถเปิดใช้งานขั้นตอนหลักของขั้นตอนหลักผ่านการส่งคืนแถวเดียว ขั้นตอนนั้นก็จะถูกดำเนินการเช่นกัน ดังนั้น การดำเนินการสามารถถูกล่ามโซ่ไว้บนแผนผัง ซึ่งอาจรวมถึงส่วนที่เหลือของแผนการดำเนินการด้วย สำหรับการดำเนินการดังกล่าว คุณสามารถใช้ first_rows เป็นเป้าหมายการปรับให้เหมาะสมเพื่อตอบสนองคำขอของผู้ใช้อย่างรวดเร็ว
สำหรับแต่ละแถวที่ดึงข้อมูลตามลำดับตามขั้นตอนลูก Oracle จะใช้ขั้นตอนพาเรนต์และขั้นตอนที่ต่อกันทั้งหมดเพียงครั้งเดียว ขั้นตอนหลักที่ถูกทริกเกอร์สำหรับแต่ละแถวที่ส่งกลับโดยขั้นตอนย่อยประกอบด้วยการเข้าถึงตาราง การเข้าถึงดัชนี การรวมลูปแบบซ้อน และตัวกรอง
ขั้นตอนหลักบางขั้นตอนจำเป็นต้องมีแถวทั้งหมดจากขั้นตอนย่อยก่อนจึงจะสามารถนำไปใช้ได้ สำหรับขั้นตอนหลักดังกล่าว Oracle ไม่สามารถใช้ขั้นตอนหลักได้จนกว่าแถวทั้งหมดจะถูกส่งกลับจากขั้นตอนย่อย ขั้นตอนหลักดังกล่าว ได้แก่ Sort, Sort-Merge Join, Group Function และ Total สำหรับการดำเนินการดังกล่าว ไม่สามารถใช้ first_rows เป็นเป้าหมายการปรับให้เหมาะสม แต่ all_rows สามารถใช้เป็นเป้าหมายการปรับให้เหมาะสม เพื่อทำให้การดำเนินการประเภทนี้ใช้รีซอร์สน้อยที่สุด
บางครั้งเมื่อมีการดำเนินการคำสั่ง จะไม่ดำเนินการทีละขั้นตอนดังที่กล่าวไว้ข้างต้น แต่อาจทำงานแบบขนาน ตัวอย่างเช่น ในสภาพแวดล้อมจริง ขั้นตอนที่ 3, 5 และ 4 อาจทำงานแบบคู่ขนานเพื่อให้ได้ประสิทธิภาพที่ดีขึ้น จากแผนภาพต้นไม้ด้านบน เป็นการยากที่จะดูลำดับที่แต่ละการดำเนินการถูกดำเนินการ อย่างไรก็ตาม ด้วยรูปแบบอื่นของแผนการดำเนินการที่สร้างโดย ORACLE ทำให้ง่ายต่อการดูว่าการดำเนินการใดถูกดำเนินการก่อนและจะดำเนินการใดในภายหลัง แผนการดำเนินการคือสิ่งที่เราต้องการจริงๆ และจะมีการอธิบายรายละเอียดในภายหลัง
บทความนี้มาจากบล็อก CSDN โปรดระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ: http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044799.aspx
-