Static SQL (SQL แบบคงที่)
Static SQL หมายถึงคำสั่ง SQL ที่กำหนดไว้ล่วงหน้าและเขียนตรงในโค้ดโปรแกรม (Hard-coded) คำสั่งเหล่านี้คงที่ ไม่เปลี่ยนแปลงตามเงื่อนไขรันไทม์
ลักษณะสำคัญ:
- คำสั่ง SQL ถูกคอมไพล์เวลาคอมไพล์ (Compile-time)
- ประสิทธิภาพสูง เนื่องจาก Execution Plan ถูกสร้างและปรับให้เหมาะสมล่วงหน้า
- ปลอดภัยจาก SQL Injection เพราะไม่มีการสร้างคำสั่งจากข้อมูลนำเข้า
- เหมาะสำหรับคำสั่งที่ใช้บ่อยและรูปแบบคงที่
Dynamic SQL (SQL แบบไดนามิก)
Dynamic SQL หมายถึงคำสั่ง SQL ที่สร้างขึ้นขณะรันโปรแกรม (Runtime) ตามเงื่อนไขหรือข้อมูลนำเข้าจากผู้ใช้
ลักษณะสำคัญ:
- คำสั่ง SQL ถูกคอมไพล์เวลารัน (Runtime)
- ยืดหยุ่นสูง สามารถสร้างคำสั่งได้ตามสถานการณ์
- มีความเสี่ยงต่อ SQL Injection ต้องจัดการความปลอดภัยอย่างเข้มงวด
- ประสิทธิภาพต่ำกว่า เนื่องจากต้อง Parse, Validate, Optimize ทุกครั้ง
- ใช้คำสั่งอย่าง
PREPARE,EXECUTE,EXECUTE IMMEDIATE
ตารางเปรียบเทียบ
| ลำดับ | หัวข้อ | Static SQL | Dynamic SQL |
|---|---|---|---|
| 1 | การเข้าถึงฐานข้อมูล | กำหนดล่วงหน้าในคำสั่ง | กำหนดได้เฉพาะตอนรัน |
| 2 | ประสิทธิภาพ | เร็วและมีประสิทธิภาพมากกว่า | ช้ากว่า |
| 3 | การคอมไพล์ | Compile-time | Runtime |
| 4 | Application Plan | กิจกรรม Compile-time | กิจกรรม Runtime |
| 5 | กรณีใช้งาน | ข้อมูลกระจายตัวสม่ำเสมอ | ข้อมูลกระจายตัวไม่สม่ำเสมอ |
| 6 | คำสั่งพิเศษ | ไม่ใช้ EXECUTE IMMEDIATE, PREPARE | ใช้ EXECUTE IMMEDIATE, EXECUTE, PREPARE |
| 7 | ความยืดหยุ่น | น้อย | สูงมาก |
สรุป: ใช้ Static SQL เมื่อคำสั่งคงที่เพื่อประสิทธิภาพและความปลอดภัย ใช้ Dynamic SQL เมื่อต้องการความยืดหยุ่นแต่ต้องระมัดระวังเรื่อง Security และ Performance