![]() |
|
![]() |
|
![]() |
การเปรียบเทียบเทคนิคที่นำมาประยุกต์ใช้ที่ก่อให้เกิดค่าใช้จ่ายที่ต่ำที่สุดในการทำที่ก่อให้เกิดค่าใช้จ่ายที่ต่ำที่สุดและการสอบถามข้อมูลที่ได้คำตอบที่ดีที่สุดสมมุติให้ระบบฐานข้อมูลของมหาวิทยาลัยแห่งหนึ่งประกอบด้วยตารางข้อมูล 4 ตาราง และแอตทริบิวต์ต่าง ๆ ดังนี้ · ตารางนักศึกษา STUDENT (Std #, Std_Name) · ตารางลงทะเบียนREGISTRATION (Std#, Course#) · ตารางเกรด GRADE (Std#, Course#, Grade) · ตารางวิชา COURSE (Course#, Course_Name, Instructor) โดยในแต่ละตารางจะมีจำนวนข้อมูลดังนี้ · ตาราง STUDENT มีข้อมูลนักศึกษาจำนวน 40,000 แถว · ตาราง REGISTRATION มีข้อมูล ตามจำนวนที่นักศึกษาลงทะเบียนเรียน แต่ไม่ใช่นักศึกษาทั้งหมด ในตัวอย่างนี้จะสมมุติว่า มีวิชาที่นักศึกษาต้องลงทะเบียนทั้งหมด 10 วิชา ต่อปี จะมีจำนวนข้อมูลทั้งหมดประมาณ 400,000 แถว · ตาราง GRADE ถ้าสมมุติให้มีข้อมูลเฉลี่ย 10 วิชา ต่อนักศึกษา 1 คน จะมีข้อมูลทั้งหมด 400,000 แถว · ตาราง COURSE มีข้อมูลวิชาบรรจุอยู่ 5,000 วิชา ถ้าต้องการหารายชื่อนักศึกษาที่ลงทะเบียนในวิชา (Couse#) ที่เรียงลำดับอยู่หหลังวิชา COMP300 จากโจทย์ข้างต้นในภาษา SQL ผู้ใช้สามารถเลือกใช้คำสั่งได้หลายคำสั่งดังนี้คือ คำสั่งที่ 1 select Std_Name, Course_Name from STUDENT, REGISTRATION, COURSE where STUDENT.Std# = REGISTRATION.Std# and COURSE.Course# = REGISTRATION.Course# and REGISTRATION.Course# > COMP300 คำสั่งที่ 2 select Std_Name, cl.Course_Name from STUDENT, REGISTRATION, COURSE c1 where STUDENT.Std# = REGISTRATION.Std# and REGISTRATION.course# in (select c2.Course# from COURSE c2 where c2.Course# > COMP300 and cl.Course# = c2.Course#) คำสั่งที่ 3 select Std_Name, cl.Course_Name from STUDENT, COURSE c1 where STUDENT.Std# in (Select REGISTRATION.Std# from REGISTRATION where REGISTRATION.course# in (select c2.Course# from COURSE c2 where c2.Course# > COMP300 and cl.Course# = c2.Course#)) จากภาษา SQL ทั้ง 3 คำสั่งนี้เมื่อผ่านส่วนตรวจสอบภาษา (parser) ที่อยู่ในตัวประมวลผลสอบถามแล้วจะได้รูปแบบของพีชคณิตแบบสัมพันธ์ (relational algebra) ดังนี้ คำสั่งที่ 1 คำสั่งที่ 2 คำสั่งที่ 3 จากคำสั่งทั้ง 3 คำสั่งนี้จะทำการเปรียบเทียบว่าคำสั่งใดที่ทำการประมวลผลโดยการดึงข้อมูลจากฐานข้อมูลและขนาดของข้อมูลที่ได้ในแต่ละขั้นตอนในการประมวลผลน้อยที่สุด จากคำสั่งที่ 1 จะมีการดึงข้อมูลและการประมวลผลข้อมูลได้ตามตารางที่ 8.3.2.1 มีขั้นตอนดังนี้ ตารางที่
8.3.2.1
ข้อมูลการประมวลผลในแต่ละขึ้นตอนของคำสั่งที่
1
ขั้นที่ 1 เป็นการจอยน์ (join) ตาราง STUDENT กับตาราง REGISTRATION ซึ่งในตาราง STUDENT จะมีข้อมูลอยู่ 40,000 แถว และตาราง REGISTRATION มีข้อมูล 400,000 แถว เมื่อจอยน์กันแล้วจะทำให้ได้ผลลัพธ์ของการประมวลผลออกมาประมาณ 400,000 แถว ครั้ง ถ้าในกรณีที่ข้อมูลนั้นไม่ได้จัดเรียง (not sorted) ผลลัพธ์ที่ได้นี้จะต้องประมวลผลถึง 40,000 *1 400,000 ครั้ง แต่ถ้าข้อมูลนั้นถูกจัดเรียง (sorted) ก็จะประมวลผลเพียง 40,000 + 400,000 ครั้ง ขั้นที่ 2 เป็นการจอยน์ (join) ระหว่างผลลัพธ์ที่ได้จากขั้นที่ 1 กับจำนวนแถวที่อยู่ในตาราง COURSE ซึ่งในกรณีที่ไม่มีการจัดเรียงข้อมูลจะทำให้ต้องประมวลผลถึง 5,000 * 400,000 ครั้ง ถ้ามีการจัดเรียงข้อมูลจะประมวลผลเพียง 5,000 + 400,000ครั้ง ซึ่งจะได้ผลลัพธ์ในขั้นตอนนี้ประมาณ 400,000 แถว ขั้นตอนที่ 3 จากผลลัพธ์ที่ได้ในขั้นที่ 2 จะทำการเลือกวิชาที่มีลำดับมากกว่า COMP300 โดยในการเลือกนี้จะ ถ้าเราสมมุติว่าวิชาที่มากกว่า COMP300 จะทำการประมวลผลโดยการเปรียบเทียบเป็นจำนวน 400,000 ครั้ง ซึ่งจะได้ผลลัพธ์ของการประมวลผลในขั้นตอนนี้ประมาณ 40,000 แถว ขั้นที่ 4 เป็นการจัดกลุ่ม (projection) ของ Std_Name และ Course_Name ซึ่งจะทำการประมวลผลทั้งหมด 40,000 ครั้งและได้ผลลัพธ์ออกมา 40,000 แถว จากคำสั่งที่ 2 เมื่อพิจารณาการดึงข้อมูลและการประมวลผลข้อมูลตามตารางที่ 8.3.2.2 ทีมีการประมวลผลดังนี้ ตารางที่ 8.3.2.2 ข้อมูลการประมวลผลในแต่ละขั้นตอนของคำสั่งที่ 2
ขั้นที่ 1 เป็นการจอยน์ระหว่างตาราง REGISTRATION และตาราง COURSE โดยในกรณีที่ข้อมูลไม่ได้จัดเรียงจะต้องประมวลผลทั้งหมด 5,000 * 400,000 ครั้ง ถ้าข้อมูลจัดเรียงลำดับจะประมวลผลทั้งหมด 5,000 + 400,000 ครั้ง ผลลัพธ์ที่ได้จากขั้นที่ 1 นี้ จะมีประมาณ 400,000 แถว ขั้นที่ 2 จากผลลัพธ์ที่ได้ในขั้นที่ 1 จะทำการเลือกวิชาที่มากกว่า COMP300 ซึ่งจะต้องประมวลผลถึง 400,000 ครั้ง จะได้ผลลัพธ์ออกมาประมาณ 40,000 แถว ขั้นที่ 3 เป็นการจอยน์ภายในตาราง STUDENT กับผลลัพธ์ที่ได้ในขั้นที่ 2 เพื่อหา Std# โดยในกรณีที่ข้อมูลไม่ได้จัดเรียงจะประมวลผลทั้งหมด 40,000 * 40,000ครั้ง และจะประมวลผลทั้งหมด 40,000 + 40,000 ครั้ง ในกรณีที่ข้อมูลจัดเรียง ซึ่งจะได้ผลลัพธ์ออกมาประมาณ 40,000 แถว ขั้นที่ 4 เป็นการจัดกลุ่ม (projection) ของ Std_Name และ Course_Name จากผลลัพธ์ที่ได้ในขั้นที่ 2 ซึ่งมีการประมวลทั้งหมด 40,000 ครั้ง และได้ผลลัพธ์ของการประมวลผลประมาณ 40,000 แถว จากคำสั่งที่ 3 จะเห็นว่าจะใช้คำสั่งในการเลือก (selection) ก่อนที่จะจอยน์ (joins) ซึ่งเมื่อพิจารณาการดึงข้อมูลและการประมวลผลข้อมูลจะได้ ดังตารางที่ 8.3.2.3 ตารางที่ 8.3.2.3 แสดงข้อมูลการประมวลผลในแต่ละขั้นตอนของคำสั่งที่ 3
ขั้นที่ 1 เลือก(selection)จากตาราง COURSE โดยรหัสวิชา (Course#) ที่มากกว่า COMP300 ผลของคำสั่งนี้จะทำให้มีการประมวลผล 5,000 ครั้ง และจะได้ผลลัพธ์ออกมาประมาณ 500 แถว ขั้นที่ 2 เลือกจากตาราง REGITRATION โดยรหัสวิชา (Course#) ที่มากกว่า COMP300 ผลของคำสั่งนี้จะทำให้มีการประมวลผลทั้งหมด 400,000 ครั้ง ได้ผลลัพธ์ประมาณ 400,000 แถว ขั้นที่ 3 เป็นการจอยน์ระหว่างผลลัพธ์ที่ได้ในขั้นที่ 1 กับผลลัพธ์ที่ได้จากการเลือกรหัสวิชาของขั้นที่ 2 จะทำให้ต้องประมวลผลถึง 500 * 40,000 ครั้งในกรณีที่ไม่ได้เรียงข้อมูลและจำนวน 500 + 40,000 กรณีที่จัดเรียงข้อมูลและจะได้ผลลัพธ์ออกมาประมาณ 40,000 แถว ขั้นที่ 4 ผลลัพธ์ที่ได้จากขั้นที่ 3 จะจอยน์กับตาราง STUDENT ในกรณีที่ไม่ได้จัดเรียงข้อมูล จะทำต้องมีการประมวลผลทั้งหมด 40,000 * 40,000 ครั้งหรือในกรณีที่จัดเรียงข้อมูลจะประมวลผลทั้งหมด 40,000 + 40,000 ครั้งจะได้ผลลัพธ์ประมาณ 40,000 แถว ขั้นที่ 5 ผลลัพธ์ที่ได้จากขั้น 4 จะจัดกลุ่มของ Std_Name และ Course_Name ซึ่งจะต้องประมวลผลทั้งหมด 40,000 ครั้ง จะได้ผลลัพธ์ออกมาประมาณ 40,000 ครั้ง สรุปว่าจากคำสั่งทั้ง 3 คำสั่ง ผู้ใช้ควรเลือกคำสั่งในการประมวลผลคือคำสั่งที่ 3 เพราะจะมีจำนวนของการประมวลผลและผลลัพธ์ในแต่ละขั้นตอนน้อยกว่าคำสั่งอื่น ๆ การเลือกคำสั่งที่ 3 เข้าประมวลผลถือเป็นการทำออพติไมเซชั่น (optimisation) ที่ผู้ใช้เป็นผู้กระทำโดยการเลือกคำสั่งเข้ามาประมวลผล แต่ในระบบการจัดการฐานข้อมูลนั้นเมื่อผู้ใช้ป้อนคำสั่งภาษาสอบถามเข้าไปแล้ว ระบบจะนำคำสั่งนั้นไปประมวลผลซึ่งในขั้นตอนของการประมวลผลนั้นจะมีการการทำออพติไมเซชั่น (optimisation) ระบบจัดการฐานข้อมูลใช้เทคนิคต่าง ๆ ในการประมวลผลโดยคำนึงถึงการดึงข้อมูลมาประมวลผลให้น้อยที่สุดและใช้เวลาน้อยในการประมวลผลน้อยที่สุด จากตัวอย่างที่กล่าวมาทั้งหมดจะเห็นว่าการหาแผนการเข้าถึงข้อมูล (access plan) หรือการทำออพติไมเซชั่น (optimisation) สามารถทำได้จากผู้ใช้โดยตรงก่อน โดยผู้ใช้จะเป็นเหมือนออฟติไมเซอร์ได้โดยเลือกคำสั่งที่มีการประมวลผลข้อมูลน้อย เพื่อประหยัดเวลาในการประมวลผล ต่อจากนั้นระบบจัดการฐานข้อมูลจะนำคำสั่งที่ผู้ใช้เลือกแล้วมาทำออพติไมเซชั่น (optimisation) ชันอีกครั้งโดยใช้เทคนิคและวิธีการต่าง ๆ ที่ระบบการจัดการฐานข้อมูลนั้น ๆ มีอยู่ เช่น เทคนิคการซอร์ตและการเมอร์จ (sorting and merge method), เทคนิคดีคอมโพสิชั่น (decomposition method) และเทคนิคโอเปอร์เรเตอร์กราฟ (operator graph) ซึ่งเทคนิคต่างๆ เหล่านี้จะทำให้ใช้เวลาในการประมวลผลน้อย |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|