เปรียบเทียบ Stored Generated Columns และ Virtual Generated Columns ใน 4 มิติหลัก:
1. ด้านพื้นที่ดิสก์ (Disk Space)
- Virtual: ไม่ใช้พื้นที่ดิสก์ (คำนวณตอนอ่าน)
- Stored: ใช้พื้นที่ดิสก์ (เก็บค่าจริงเหมือนคอลัมน์ปกติ)
2. ด้านการดำเนินการ ALTER TABLE (Operation)
- Virtual: INPLACE Operation - เปลี่ยน Metadata เท่านั้น เร็วมาก
- Stored: COPY Operation - ต้องอ่าน/เขียนข้อมูลทั้งตาราง ช้า ใช้ทรัพยากรมาก
3. ด้านการคำนวณ (Calculation)
- Virtual: คำนวณ ตอนอ่าน (ON READ) - ทุกครั้งที่ SELECT, BEFORE Triggers
- Stored: คำนวณ ตอนเขียน (ON WRITE) - ทุกครั้งที่ INSERT/UPDATE
4. เมื่อไหนควรใช้แบบไหน (When to Use)
| สถานการณ์ | แนะนำ | เหตุผล |
|---|---|---|
| ข้อมูลเปลี่ยนแปลงบ่อย (High Write) | Virtual | หลีกเลี่ยง COPY operation ตอน ALTER, คำนวณตอนอ่านแทน |
| ข้อมูลอ่านบ่อย เขียนน้อย (Read Heavy) | Stored | คำนวณครั้งเดียวตอนเขียน อ่านเร็ว ไม่คำนวณซ้ำ |
| นิพจน์คำนวณซับซ้อน/หนัก | Stored | ไม่ให้ CPU คำนวณซ้ำทุกครั้งที่ SELECT |
| ต้องการ Unique Index บน Generated Column | Stored | Virtual Column ไม่รองรับ Unique Index (MySQL จำกัด) |
สรุป: เลือก Virtual เป็นค่าเริ่มต้น (Default) หากต้องการประสิทธิภาพอ่านสูงและข้อมูลคงที่ ใช้ Stored