คอมพิวเตอร์กับคำสั่ง merge

คอมพิวเตอร์-คำสั่ง merge ช่วยเพิ่มความเร็วในการรันโปรแกรม

สำหรับคนที่เขียนโปรแกรม sql คำสั่งหนึ่งที่จัดว่าเร็วมากในการประมวลผลคือ คำสั่ง merge มันสามารถอัพเดตข้อมูลในหลักล้านด้วยเวลาเพียง 2 วินาทีเท่านั้น 

คำสั่ง merge ใน sql เป็นคำสั่งที่รวมของ insert และ update เข้าด้วยกัน มันมีประสิทธิภาพที่ยอดเยี่ยมมากคือ สามารถอัพเดตข้อมูลขนาดเล็ก ที่น้อยกว่า 1000 และข้อมูลขนาดใหญ่ที่มากกว่า 1 ล้านจากข้อมูลต้นทางไปยังข้อมูลปลายทาง ซึ่งข้อมูลต้นทางกับข้อมูลปลายทางจะสัมพันธ์กัน (ใช้คำสั่ง update ) หรือข้อมูลปลายทางไม่สัมพันธ์กับข้อมูลต้นทาง (ใช้คำสัง่ย่อยอัพเดต)

ซึ่งอัพคำสั่ง merge จะมีโครงสร้างคือ หากว่าข้อมูลต้นทาง match กับข้อมูลปลายทางจะใช้เวลา มี คำสั่งบอกว่า WHEN MATCHED THEN UPDATE…) หรือการอินเสิร์ต ดาต้าที่มีคำสั่งว่า WHEN NOT MATCHED THEN INSERT…

เพื่อการใช้งานคำสั่ง merge อย่างเต็มประสิทธิภาพ table ทั้งสองจะต้องมีกลุ่มของฟิลด์ที่ตรงกัน เมื่อ table เมื่อเราเขียนโปรแกรมให้ถูกต้องตาม syntax มันก็จะเพิ่มประสิทธิภาพได้สูงมากจริงๆ

โดยเริ่มต้นลูกค้าต้องการอัพเดตข้อมูลจำนวน 1 ล้านเรคอร์ดลงไปใน target table โดยมีจำนวนฟิลด์มากๆ เช่นอัพเดตคราวละ 10 ฟิลด์ 1000000 เรคอร์ด ซึ่งการเทสต์นี้ใช้เวลาเพียง 30 วินาทีเท่านั้นเอง หรือโปรแกรมเมอร์เขียนโปรแกรมให้ถูกต้องตามหลักของ constraint ต่างๆ จะช่วยให้เวลาลดลงจาก 30 เหลือเพียง 8 วินาทีก็ได้

เงื่อนไขของการใช้คำสั่ง merge มีอะไรบ้าง

งานของเราที่ต้องเปลี่ยนมาใช้ merge เพื่อให้ประสิทธิภาพในอัพเดตเปลี่ยนแปลงข้อมูลในตารางทำได้เร็วยิ่งขึ้น โดย table เป้าหมายของเราจะต้องมี primary key หรือ ฟิลด์ที่เป็น unique constraint ด้วย

การอัพเดตหรืออินเสิร์ตดาต้าสามารถอัพเดตได้ทุกฟิลด์เพียงแต่ว่าฟิลด์ที่นำมาเชื่อมต่อกับ ฟิลด์ที่ทำการอัพเดตต้องคนละชื่อกัน และหากว่าต้องการให้มีประสิทธิภาพดียิ่งขึ้นคือ table ต้นทางต้องมีขนาดเล็กกว่า table ขนาดใหญ่

ซึ่งผลลัพธ์ที่ได้จากการทดสอบมีดังนี้คือ (เป็นการรันคิวรี่ที่เครื่อง database server)

อัพเดตข้อมูลขนาด 1 ล้านเรคอร์ด ที่จำนวนฟิลด์ 12 ฟิลด์ ไปที่ table ที่มีจำนวน row 2.7 พันล้านเรคอร์ด ใช้เวลาเพียง 2.2 วินาที

อินเสิร์ตข้อมูล 1 ล้านเรคอร์ดเข้าไปที่ fact table จะใช้เวลา 1.4 วินาที

ใช้คำสั่ง merge statement ที่ table เดียวกัน โดย insert 500,000 เรคอร์ดและ อัพเดต 500,000 ใช้เวลาทั้งหมด 13 วินาที จะเห็นได้ว่าการใช้คำสั่ง merge เป็นคำสั่งที่มีประสิทธิภาพในการทำงานสูงมากคือช่วยให้การรันคิวรี่ของเราทำได้อย่างรวดเร็วมากๆ

ซึ่งก็ต้องขึ้นอยู่กับการเขียนโปรแกรมการออกแบบเพื่อ design database การเลือก primary key ที่เหมาะสมเพื่อให้รันโปรแกรมได้โดยถูก syntax และเพื่อให้เร็วยิ่งขึ้นต่อไป

การ tuning sql เป็นสิ่งที่นักเขียนโปรแกรมจำเป็นต้องเรียนรู้ศาสตร์และศิลป์ด้านนี้ หากทำได้จะเพิ่ม value ในตัวผู้ประกอบอาชีพได้เป็นอย่างดี