วิธีการ Insert ข้อมูลหลายค่าในคำสั่ง MySQL เดียวอย่างมีประสิทธิภาพ
เมื่อต้องการเพิ่มข้อมูลจำนวนมากเข้าไปในตาราง MySQL การใช้คำสั่ง INSERT แบบแยกต่างหากแต่ละแถวจะทำให้ประสิทธิภาพลดลงอย่างมาก เนื่องจากแต่ละคำสั่งต้องมีการเชื่อมต่อและประมวลผลแยกกัน
❌ วิธีที่ไม่แนะนำ (ช้าและไม่มีประสิทธิภาพ)
INSERT INTO yourTableName VALUES (value1, value2, ...); INSERT INTO yourTableName VALUES (value1, value2, ...); INSERT INTO yourTableName VALUES (value1, value2, ...); -- ทำซ้ำหลายครั้ง
✅ วิธีที่เร็วที่สุด (แนะนำ)
ใช้คำสั่ง INSERT เดียวพร้อมระบุค่าหลายชุดในวงเล็บ คั่นด้วยเครื่องหมายจุลภาค:
INSERT INTO yourTableName VALUES (value1, value2, ...), (value1, value2, ...), (value1, value2, ...), ...;
ตัวอย่างการใช้งานจริง
สร้างตารางตัวอย่าง:
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20),
Age INT
);
เพิ่มข้อมูล 3 แถวในคำสั่งเดียว:
INSERT INTO DemoTable (Name, Age) VALUES
('Chris', 25),
('David', 29),
('Mike', 32);
ผลลัพธ์ที่ได้:
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | Chris | 25 | | 2 | David | 29 | | 3 | Mike | 32 | +----+-------+------+
ข้อดีของวิธีนี้
- ลด Network Round-trip: ส่งคำสั่งเพียงครั้งเดียว
- Transaction เดียว: ทำงานแบบ Atomic ทั้งชุด
- ประสิทธิภาพดีกว่ามาก: เร็วกว่าการ Insert แยกต่างหากหลายเท่า
- ลด Lock Contention: ล็อกตารางน้อยกว่า
ข้อควรระวัง
- ขนาดคำสั่งไม่ควรเกิน
max_allowed_packet(ค่าเริ่มต้น 4MB-64MB) - สำหรับข้อมูลมหาศาล ควรแบ่งเป็นชุดๆ (batch) ชุดละ 500-1000 แถว
- พิจารณาใช้
LOAD DATA INFILEสำหรับข้อมูลปริมาณมากมาก