วิธีเพิ่มประสิทธิภาพ MySQL
คู่มือฉบับสมบูรณ์สำหรับการเพิ่มประสิทธิภาพฐานข้อมูล MySQL: การปรับแต่งการกำหนดค่า การเพิ่มประสิทธิภาพคำสั่ง การสร้างดัชนี และการตรวจสอบ

การเพิ่มประสิทธิภาพ MySQL มีความสำคัญอย่างยิ่งสำหรับแอปพลิเคชันที่จัดการข้อมูลจำนวนมากหรือการใช้งานสูง คู่มือนี้ครอบคลุมเทคนิคสำคัญในการปรับปรุงประสิทธิภาพ MySQL ตั้งแต่การปรับแต่งการกำหนดค่าจนถึงการเพิ่มประสิทธิภาพคำสั่ง
การเพิ่มประสิทธิภาพการกำหนดค่า MySQL
แก้ไขไฟล์การกำหนดค่า MySQL เพื่อเพิ่มประสิทธิภาพตามทรัพยากรของเซิร์ฟเวอร์ของคุณ:
# แก้ไขการกำหนดค่า MySQL (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# แก้ไขการกำหนดค่า MySQL (CentOS/RHEL)
sudo nano /etc/my.cnf
# เพิ่มหรือแก้ไขการตั้งค่าเหล่านี้:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 64M
query_cache_type = 1
tmp_table_size = 64M
max_heap_table_size = 64M
# รีสตาร์ท MySQL
sudo systemctl restart mysql # Ubuntu/Debian
sudo systemctl restart mysqld # CentOS/RHELการเพิ่มประสิทธิภาพ InnoDB
InnoDB เป็น storage engine เริ่มต้นของ MySQL เพิ่มประสิทธิภาพเพื่อประสิทธิภาพที่ดีขึ้น:
# ใน /etc/mysql/mysql.conf.d/mysqld.cnf หรือ /etc/my.cnf
[mysqld]
# InnoDB buffer pool (ใช้ 70-80% ของ RAM ที่มีอยู่)
innodb_buffer_pool_size = 2G
# ขนาดไฟล์ log InnoDB
innodb_log_file_size = 512M
# วิธีการ flush InnoDB (สำหรับ SSD)
innodb_flush_method = O_DIRECT
# InnoDB I/O threads
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# InnoDB flush log ที่ transaction commit
innodb_flush_log_at_trx_commit = 2การกำหนดค่า Query Cache
Query cache สามารถปรับปรุงประสิทธิภาพสำหรับงานที่เน้นการอ่าน (หมายเหตุ: Query cache ถูกยกเลิกใน MySQL 8.0):
# สำหรับ MySQL 5.7 และก่อนหน้า
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
# ตรวจสอบสถานะ query cache
mysql> SHOW VARIABLES LIKE 'query_cache%';
# ตรวจสอบสถิติ query cache
mysql> SHOW STATUS LIKE 'Qcache%';การเพิ่มประสิทธิภาพดัชนี
การสร้างดัชนีที่เหมาะสมมีความสำคัญอย่างยิ่งต่อประสิทธิภาพของคำสั่ง:
# วิเคราะห์ตารางเพื่ออัปเดตสถิติดัชนี
ANALYZE TABLE table_name;
# ตรวจสอบดัชนีที่ไม่ได้ใช้
SELECT * FROM sys.schema_unused_indexes;
# สร้างดัชนี
CREATE INDEX idx_column ON table_name(column_name);
# สร้างดัชนีแบบผสม
CREATE INDEX idx_multi ON table_name(col1, col2, col3);
# แสดงดัชนี
SHOW INDEXES FROM table_name;
# ลบดัชนีที่ไม่ได้ใช้
DROP INDEX idx_name ON table_name;การเพิ่มประสิทธิภาพคำสั่ง
เพิ่มประสิทธิภาพคำสั่ง SQL ของคุณเพื่อประสิทธิภาพที่ดีขึ้น:
- ใช้ EXPLAIN เพื่อวิเคราะห์แผนการดำเนินการคำสั่ง: EXPLAIN SELECT * FROM table WHERE column = 'value'
- หลีกเลี่ยง SELECT * - เลือกเฉพาะคอลัมน์ที่จำเป็น
- ใช้ LIMIT เพื่อจำกัดชุดผลลัพธ์
- ใช้ WHERE clauses ที่เหมาะสมกับคอลัมน์ที่มีดัชนี
- หลีกเลี่ยงฟังก์ชันใน WHERE clauses (เช่น WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
- ใช้ JOINs แทน subqueries เมื่อเป็นไปได้
- ใช้ UNION แทน OR สำหรับเงื่อนไขหลายอย่างเมื่อเหมาะสม
การตรวจสอบประสิทธิภาพ MySQL
# ตรวจสอบสถานะ MySQL
mysql> SHOW STATUS;
# ตรวจสอบคำสั่งที่ช้า
mysql> SHOW VARIABLES LIKE 'slow_query%';
# เปิดใช้งาน slow query log
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
# ตรวจสอบรายการกระบวนการ
mysql> SHOW PROCESSLIST;
# ตรวจสอบสถานะตาราง
mysql> SHOW TABLE STATUS LIKE 'table_name';
# ตรวจสอบสถานะ InnoDB
mysql> SHOW ENGINE INNODB STATUS;เคล็ดลับการเพิ่มประสิทธิภาพ
- รัน OPTIMIZE TABLE เป็นประจำเพื่อ defragment ตาราง
- ตรวจสอบ slow query log และเพิ่มประสิทธิภาพคำสั่งที่ช้า
- ใช้ connection pooling เพื่อลด overhead ของการเชื่อมต่อ
- แบ่งพาร์ติชันตารางขนาดใหญ่ตามวันที่หรือช่วงสำหรับประสิทธิภาพที่ดีขึ้น
- ใช้ read replicas สำหรับงานที่เน้นการอ่าน
- อัปเดต MySQL ให้เป็นเวอร์ชันเสถียรล่าสุด
- ตรวจสอบ disk I/O และพิจารณาใช้ SSD/NVMe storage
- ใช้ EXPLAIN ANALYZE (MySQL 8.0+) สำหรับการวิเคราะห์คำสั่งแบบละเอียด