MySQL มี Generated Columns 2 ประเภทหลัก แตกต่างกันที่การเก็บรักษาข้อมูลและเวลาคำนวณ
1. VIRTUAL GENERATED COLUMN (ค่าเริ่มต้น)
- ไม่ใช้พื้นที่ดิสก์ - ไม่เก็บค่าจริง
- คำนวณ ตอนอ่าน (ON READ) - ทุกครั้งที่ SELECT
- เป็น INPLACE operation - เพิ่ม/ลบคอลัมน์เร็ว ไม่ต้องเขียนข้อมูลใหม่
- ระบุ
VIRTUALหรือ ไม่ระบุก็ได้ (Default)
ตัวอย่าง
CREATE TABLE triangle( SideA DOUBLE, SideB DOUBLE, SideC DOUBLE AS (SQRT(SideA * SideA + SideB * SideB)) ); -- SideC จะเป็น VIRTUAL GENERATED
2. STORED GENERATED COLUMN
- ใช้พื้นที่ดิสก์ - เก็บค่าจริงเหมือนคอลัมน์ปกติ
- คำนวณ ตอนเขียน (ON WRITE) - ตอน INSERT/UPDATE
- เป็น COPY operation - เพิ่ม/ลบคอลัมน์ช้า ต้องเขียนข้อมูลทั้งตารางใหม่
- ต้องระบุ
STOREDอย่างชัดเจน
ตัวอย่าง
CREATE TABLE triangle_stored( SideA DOUBLE, SideB DOUBLE, SideC DOUBLE AS (SQRT(SideA * SideA + SideB * SideB)) STORED ); -- SideC จะเป็น STORED GENERATED
ตารางเปรียบเทียบ
| คุณสมบัติ | VIRTUAL | STORED |
|---|---|---|
| พื้นที่ดิสก์ | ไม่ใช้ | ใช้ |
| เวลาคำนวณ | ตอน READ | ตอน WRITE |
| ALTER TABLE | INPLACE (เร็ว) | COPY (ช้า) |
| เหมาะสำหรับ | ข้อมูลเปลี่ยนบ่อย / คำนวณเบา | ข้อมูลเปลี่ยนน้อย / คำนวณหนัก |