แนวคิดของโรวิด:
rowid เป็นคอลัมน์หลอก เนื่องจากเป็นคอลัมน์หลอก ผู้ใช้จึงไม่ได้กำหนดคอลัมน์นี้ แต่จะเพิ่มโดยตัวระบบเอง แต่ละตารางจะมีคอลัมน์หลอกเป็นแถว แต่ค่าของคอลัมน์ ROWID ไม่ได้ถูกจัดเก็บในตาราง อย่างไรก็ตาม คุณสามารถใช้คอลัมน์นี้ได้เหมือนกับคอลัมน์อื่นๆ แต่คุณไม่สามารถลบหรือเปลี่ยนแปลงคอลัมน์ได้ และไม่สามารถแก้ไขหรือแทรกค่าของคอลัมน์ได้ เมื่อแถวของข้อมูลถูกแทรกลงในฐานข้อมูล Rowid จะไม่ซ้ำกันในระหว่างวงจรชีวิตของแถว นั่นคือ แม้ว่าแถวจะผ่านการย้ายแถว แต่ Rowid จะไม่เปลี่ยนแปลง
ทำไมต้องใช้ ROWID
rowid จัดเตรียมวิธีการเข้าถึงที่เร็วที่สุดให้กับแถวที่กำหนดในตาราง บล็อกข้อมูลที่เกี่ยวข้องสามารถระบุตำแหน่งได้โดยตรงผ่าน ROWID จากนั้นจึงอ่านลงในหน่วยความจำ เมื่อเราสร้างดัชนี ดัชนีไม่เพียงแต่เก็บค่าของคอลัมน์ดัชนีเท่านั้น แต่ยังเก็บ ROWID ของแถวที่สอดคล้องกับค่าดัชนี ด้วยวิธีนี้ หลังจากที่เราค้นหา ROWID ของแถวที่เกี่ยวข้องผ่านดัชนีอย่างรวดเร็ว เราสามารถสืบค้นข้อมูลผ่าน ROWID ได้อย่างรวดเร็ว ด้วยเหตุนี้จึงเร็วขึ้นเมื่อเราใช้การสืบค้นแบบดัชนี
ใน ORACLE8 เวอร์ชันก่อนหน้า ROWID ประกอบด้วย FILE, BLOCK และ ROW NUMBER ด้วยการขยายแนวคิดออบเจ็กต์ใน Oracle8 ROWID ได้เปลี่ยนไป ประกอบด้วย OBJECT, FILE, BLOCK และ ROW NUMBER คุณสามารถใช้ DBMS_ROWID เพื่อแยกย่อย rowid ออกเป็นส่วนด้านบน หรือคุณสามารถรวมส่วนด้านบนให้เป็น rowid ที่ถูกต้องได้
แนวคิด SQL แบบเรียกซ้ำ บางครั้งเพื่อที่จะดำเนินการคำสั่ง sql ที่ออกโดยผู้ใช้ Oracle จะต้องดำเนินการคำสั่งเพิ่มเติมบางส่วน เราเรียกคำสั่งเพิ่มเติมเหล่านี้ว่า 'การเรียกซ้ำ' หรือ 'คำสั่ง SQL ที่เกิดซ้ำ' ตัวอย่างเช่น เมื่อมีการออกคำสั่ง DDL ORACLE จะออกคำสั่ง SQL แบบเรียกซ้ำโดยปริยายเสมอเพื่อแก้ไขข้อมูลพจนานุกรมข้อมูล เพื่อให้ผู้ใช้สามารถดำเนินการคำสั่ง DDL ได้สำเร็จ การโทรแบบเรียกซ้ำมักเกิดขึ้นเมื่อข้อมูลพจนานุกรมข้อมูลที่ต้องการไม่อยู่ในหน่วยความจำที่ใช้ร่วมกัน การโทรแบบเรียกซ้ำเหล่านี้จะอ่านข้อมูลพจนานุกรมข้อมูลจากฮาร์ดดิสก์ลงในหน่วยความจำ ผู้ใช้ไม่สนใจเกี่ยวกับการดำเนินการของคำสั่ง SQL แบบเรียกซ้ำเหล่านี้ ORACLE จะดำเนินการคำสั่งเหล่านี้โดยอัตโนมัติเมื่อจำเป็น แน่นอนว่าทั้งคำสั่ง DML และ SELECT อาจทำให้เกิด SQL แบบเรียกซ้ำได้ พูดง่ายๆ ก็คือ เราสามารถนึกถึงทริกเกอร์ว่าเป็น SQL แบบเรียกซ้ำได้
แหล่งที่มาของแถว
ใช้ในการสืบค้น ชุดของแถวที่มีคุณสมบัติตามที่กำหนดซึ่งส่งคืนโดยการดำเนินการก่อนหน้านี้อาจเป็นชุดของข้อมูลแถวทั้งหมดในตาราง นอกจากนี้ยังอาจเป็นชุดของข้อมูลแถวบางส่วนในตาราง หรืออาจเป็นชุดของสองแถวข้างต้นก็ได้ แหล่งที่มาของแถว การรวบรวมข้อมูลแถวที่ได้รับหลังจากการดำเนินการเชื่อมต่อ (เช่น การเชื่อมต่อแบบรวม)
ภาคแสดง
WHERE ข้อจำกัดในแบบสอบถาม
โต๊ะขับรถ
ตารางนี้เรียกอีกอย่างว่าตารางด้านนอก (OUTER TABLE) แนวคิดนี้ใช้ในการรวมและ HASH ซ้อนกัน หากแหล่งที่มาของแถวส่งคืนข้อมูลแถวมากขึ้น จะส่งผลเสียต่อการดำเนินการที่ตามมาทั้งหมด โปรดทราบว่าแม้จะแปลเป็นตารางการขับรถ แต่จริงๆ แล้วแปลได้แม่นยำกว่าว่าเป็นแหล่งที่มาของแถวการขับรถ โดยทั่วไป หลังจากใช้ข้อจำกัดคิวรี ตารางที่มีแหล่งที่มาของแถวน้อยกว่าจะถูกส่งกลับเป็นตารางการขับขี่ ดังนั้น หากตารางขนาดใหญ่มีข้อจำกัด (เช่น ข้อจำกัดด้านความเท่าเทียมกัน) ในเงื่อนไข WHERE ตารางขนาดใหญ่ก็จะถูกใช้เป็นตารางขับเคลื่อนด้วย ตาราง เหมาะสม ดังนั้นจึงไม่ใช่ว่ามีเพียงตารางขนาดเล็กเท่านั้นที่สามารถใช้เป็นตารางการขับขี่ได้ ข้อความที่ถูกต้องควรเป็นว่าหลังจากใช้ข้อจำกัดในการสืบค้นแล้ว ตารางที่ส่งคืนแหล่งที่มาของแถวน้อยลงจะถูกใช้เป็นตารางการขับขี่ ในแผนการดำเนินการ ควรเป็นแหล่งที่มาของแถวบน ซึ่งจะแจ้งให้ทราบในภายหลัง ในคำอธิบายที่ตามมาของเรา ตารางนี้โดยทั่วไปจะเรียกว่าแหล่งข้อมูลแถวที่ 1 ของการดำเนินการรวม
โต๊ะสอบสวน (โต๊ะสอบสวน)
ตารางนี้เรียกอีกอย่างว่าโต๊ะด้านใน (INNER TABLE) หลังจากที่เราได้รับแถวข้อมูลเฉพาะจากตารางไดรเวอร์แล้ว เราจะค้นหาแถวในตารางที่ตรงตามเงื่อนไขการรวม ดังนั้นตารางควรเป็นตารางขนาดใหญ่ (จริงๆ แล้วควรเป็นตารางที่ส่งคืนแหล่งที่มาของแถวที่ใหญ่กว่า) และควรมีดัชนีในคอลัมน์ที่เกี่ยวข้อง ในคำอธิบายที่ตามมาของเรา ตารางนี้โดยทั่วไปจะเรียกว่าแหล่งข้อมูลแถวที่ 2 ของการดำเนินการรวม
ดัชนีรวม (ดัชนีที่ต่อกัน)
ดัชนีที่ประกอบด้วยหลายคอลัมน์ เช่น สร้างดัชนี idx_emp บน emp(col1, col2, col3, ...) จากนั้นเราจะเรียกดัชนี idx_emp ว่าเป็นดัชนีผสม มีแนวคิดที่สำคัญในดัชนีรวม: คอลัมน์นำ ในตัวอย่างข้างต้น คอลัมน์ col1 คือคอลัมน์นำ เมื่อเราทำการสืบค้น เราสามารถใช้ "where col1 = ?" หรือ "where col1 = ? และ col2 = ?" ข้อจำกัดดังกล่าวจะใช้ดัชนี แต่แบบสอบถาม "where col2 = ?" ดังนั้น เมื่อรวมคอลัมน์นำหน้าไว้ในข้อจำกัดแล้ว ดัชนีรวมจึงจะถูกใช้สำหรับข้อจำกัดนั้น
หัวกะทิ:
การเปรียบเทียบจำนวนคีย์ที่ไม่ซ้ำกันในคอลัมน์กับจำนวนแถวในตารางจะเป็นตัวกำหนดการเลือกของคอลัมน์ หากอัตราส่วนของ "จำนวนคีย์ที่ไม่ซ้ำกัน/จำนวนแถวในตาราง" ของคอลัมน์ใกล้กับ 1 การเลือกของคอลัมน์จะสูงกว่า คอลัมน์จะเหมาะสมกว่าสำหรับการสร้างดัชนี และการเลือกของดัชนี ก็สูงขึ้นเช่นกัน เมื่อทำการสืบค้นคอลัมน์ที่เลือกได้สูง ข้อมูลจะถูกส่งกลับน้อยลง ดังนั้นการสืบค้นแบบดัชนีจึงเหมาะสมกว่า
ด้วยความรู้พื้นฐานนี้ เราจึงเริ่มแนะนำแผนปฏิบัติการ เพื่อดำเนินการคำสั่ง Oracle อาจต้องดำเนินการหลายขั้นตอน แต่ละขั้นตอนเหล่านี้อาจเป็นการดึงแถวข้อมูลจากฐานข้อมูลทางกายภาพหรือจัดเตรียมข้อมูลเหล่านั้นด้วยวิธีใดวิธีหนึ่งสำหรับผู้ใช้ที่ออกคำสั่ง การรวมกันของขั้นตอนเหล่านี้ที่ Oracle ใช้เพื่อดำเนินการคำสั่งเรียกว่าแผนการดำเนินการ แผนการดำเนินการเป็นส่วนที่ซับซ้อนและสำคัญที่สุดของการปรับให้เหมาะสมของ SQL เพียงทราบว่า ORACLE ดำเนินการคำสั่ง SQL ภายในอย่างไร เราจึงจะทราบได้ว่าแผนการดำเนินการที่เลือกโดยเครื่องมือเพิ่มประสิทธิภาพนั้นเหมาะสมที่สุดหรือไม่ แผนการดำเนินการมีความสำคัญต่อ DBA เท่ากับงบการเงินมีความสำคัญต่อบุคลากรทางการเงิน ดังนั้นปัญหาหลักที่เราเผชิญคือ วิธีรับแผนปฏิบัติการ วิธีวิเคราะห์แผนปฏิบัติการเพื่อค้นหาปัญหาหลักที่ส่งผลต่อประสิทธิภาพ ต่อไปนี้จะเริ่มต้นด้วยการวิเคราะห์แผนการดำเนินการแบบต้นไม้ จากนั้นแนะนำวิธีรับแผนปฏิบัติการ จากนั้นแนะนำวิธีวิเคราะห์แผนปฏิบัติการ
ตัวอย่าง:
ตัวอย่างนี้แสดงแผนการดำเนินการสำหรับคำสั่ง SQL ต่อไปนี้
เลือก ename, job, sal, dname
จาก ฝ่ายปฏิบัติการ ฝ่าย
โดยที่ emp.deptno = derpt.deptno
และไม่มีอยู่จริง
(เลือก *
จาก ซาลเกรด
โดยที่ emp.sal ระหว่างการสูญเสียและ hisal );
ข้อความนี้จะสอบถามชื่อ งาน เงินเดือน และชื่อแผนกของพนักงานทั้งหมดที่มีเงินเดือนไม่อยู่ในช่วงเงินเดือนที่แนะนำ
บทความนี้มาจากบล็อก CSDN โปรดระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ: http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044672.aspx