การนำเข้าข้อมูลจากไฟล์ CSV เข้าสู่ฐานข้อมูล MySQL เป็นงานที่พบได้บ่อย
โดยเฉพาะในระบบที่ต้องนำเข้าข้อมูลจำนวนมาก เช่น ข้อมูลลูกค้า
ข้อมูลสินค้า หรือข้อมูลจากระบบอื่น
หากไฟล์ CSV มีขนาดใหญ่มาก เช่น หลายแสนหรือหลายล้านแถว
จำเป็นต้องใช้วิธีที่เหมาะสมเพื่อให้การ Import ทำได้รวดเร็วและไม่เกิดปัญหา
เช่น Memory เต็ม หรือระบบทำงานช้า
วิธีที่ 1: ใช้คำสั่ง LOAD DATA INFILE (วิธีที่เร็วที่สุด)
คำสั่ง LOAD DATA INFILE เป็นวิธีที่มีประสิทธิภาพที่สุดในการ Import CSV
เข้าสู่ MySQL เพราะเป็นคำสั่งที่ทำงานภายใน Database Engine โดยตรง
LOAD DATA INFILE '/path/data.csv'
INTO TABLE customers
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
คำอธิบาย
- FIELDS TERMINATED BY ',' คือการกำหนดตัวคั่นคอลัมน์
- ENCLOSED BY '"' ใช้เมื่อข้อมูลถูกครอบด้วยเครื่องหมายคำพูด
- LINES TERMINATED BY '\n' คือการกำหนดการขึ้นบรรทัดใหม่
- IGNORE 1 ROWS ใช้ข้าม Header ของไฟล์ CSV
วิธีที่ 2: ใช้ LOAD DATA LOCAL INFILE
หากไฟล์ CSV อยู่ในเครื่อง Client และไม่อยู่บน Server
สามารถใช้คำสั่ง LOAD DATA LOCAL INFILE
LOAD DATA LOCAL INFILE 'C:/data/customers.csv'
INTO TABLE customers
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
วิธีที่ 3: Import ผ่าน MySQL Workbench
MySQL Workbench มีเครื่องมือสำหรับ Import CSV
เหมาะสำหรับผู้ที่ต้องการใช้งานผ่านหน้าจอ GUI
- เปิด MySQL Workbench
- คลิกที่ Table ที่ต้องการ Import
- เลือก Table Data Import Wizard
- เลือกไฟล์ CSV
- กำหนด Column Mapping
- เริ่ม Import ข้อมูล
วิธีที่ 4: Import ผ่าน Script (เหมาะสำหรับไฟล์ใหญ่มาก)
สำหรับไฟล์ CSV ขนาดใหญ่มาก เช่น หลาย GB
อาจใช้ภาษาโปรแกรม เช่น Python หรือ Node.js
อ่านไฟล์ทีละส่วน (Batch) แล้ว Insert เข้าฐานข้อมูล
INSERT INTO customers(name,email)
VALUES
('John','john@email.com'),
('Jane','jane@email.com');
เทคนิคเพิ่มความเร็วในการ Import
- ปิด Index ชั่วคราวก่อน Import
- ปิด Foreign Key Check
- Import ทีละ Batch
- ใช้ LOAD DATA INFILE แทน INSERT
SET foreign_key_checks = 0;
ข้อควรระวัง
- ตรวจสอบ Encoding ของไฟล์ CSV
- ตรวจสอบรูปแบบตัวคั่นข้อมูล
- ตรวจสอบจำนวน Column ให้ตรงกับตาราง
สรุป
การ Import CSV ขนาดใหญ่ใน MySQL ควรใช้คำสั่ง
LOAD DATA INFILE เพราะมีประสิทธิภาพสูงและทำงานได้รวดเร็ว
หากไฟล์อยู่ในเครื่อง Client สามารถใช้ LOAD DATA LOCAL INFILE
หรือใช้เครื่องมือ MySQL Workbench สำหรับการ Import ผ่าน GUI
และหากไฟล์มีขนาดใหญ่มากควรใช้การ Import แบบ Batch
เพื่อลดภาระของระบบฐานข้อมูล
