วิธีค้นหาและแก้ไข Query ที่ช้าหรือไม่ index ใน MySQL

ผมทำในระบบปฎิบัติการ Centos ที่มาพร้อมกับ DirectAdmin นะครับ

  1. ไปตั้งค่าใน /etc/my.cnf ครับโดยใส่ 3 บรรทัดนี้ครับ
    log-slow-queries                = slow.mysql.log
    log_queries_not_using_indexes
    long_query_time                 = 10
  2. Restart MySQL ครับ
  3. พิมพ์คำสั่ง updatedb ลงใน shell ครับเสร็จแล้วต่อด้วย locate slow.mysql.log ครับ
  4. จะเจอไฟล์ log ซึ่งของผมในที่นี้อยู่ที่ /var/lib/mysql/slow.mysql.log
  5. เข้าไปดูไฟล์ผ่าน editor หรือแล้วแต่ถนัดได้เลยครับ แต่ในที่นี้ผมใช้
    tail /var/lib/mysql/slow.mysql.log
  6. เสร็จแล้วเราจะเห็น Query ที่ช้าหรือไม่มีการทำ index วิธีคือ copy query ไปลอง EXPLAIN query ดู
  7. ตัวอย่างเช่น EXPLAIN SELECT * FROM `tests` WHERE source = 'test.com'
  8. เสร็จแล้วมันจะบอกว่า Query นี้ได้ใช้ Index หรือยัง ถ้ายังก็ไปทำ Index แต่ถ้าทำแล้ว ลองหาวิธี Query แบบอื่นจะได้เร็วขึ้น
  9. ลอง EXPLAIN ดูอีกครั้งว่าใช้ Index รึยังด้วยก่อนจะทำอันอื่นต่อ
  10. Repeat ข้อ 5-9 ทำจนกว่า log สุดท้ายจะเป็นอันล่าสุดที่เราแก้

ปล. การทำ Index จะทำให้เปลื้องพวก key_buffer_size กับ innodb_buffer_pool_size ยังไงก็อย่าลืมปรับ config ส่วนนี้ด้วย

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>