กลับไปหน้าบล็อก
มกราคม 27, 2026คู่มือ

วิธีเพิ่มประสิทธิภาพ MySQL

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

วิธีเพิ่มประสิทธิภาพ MySQL

การเพิ่มประสิทธิภาพ MySQL มีความสำคัญอย่างยิ่งสำหรับแอปพลิเคชันที่จัดการข้อมูลจำนวนมากหรือการใช้งานสูง คู่มือนี้ครอบคลุมเทคนิคสำคัญในการปรับปรุงประสิทธิภาพ MySQL ตั้งแต่การปรับแต่งการกำหนดค่าจนถึงการเพิ่มประสิทธิภาพคำสั่ง

การเพิ่มประสิทธิภาพการกำหนดค่า MySQL

แก้ไขไฟล์การกำหนดค่า MySQL เพื่อเพิ่มประสิทธิภาพตามทรัพยากรของเซิร์ฟเวอร์ของคุณ:

bash
# แก้ไขการกำหนดค่า 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 เพิ่มประสิทธิภาพเพื่อประสิทธิภาพที่ดีขึ้น:

bash
# ใน /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):

bash
# สำหรับ 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%';

การเพิ่มประสิทธิภาพดัชนี

การสร้างดัชนีที่เหมาะสมมีความสำคัญอย่างยิ่งต่อประสิทธิภาพของคำสั่ง:

bash
# วิเคราะห์ตารางเพื่ออัปเดตสถิติดัชนี
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

bash
# ตรวจสอบสถานะ 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+) สำหรับการวิเคราะห์คำสั่งแบบละเอียด