1. ถ้าจะสร้างตาราง โดยจะใช้ field ที่เราใช้เป็นเงื่อนไขในการ query บ่อยๆ ก็สามารถสร้างตารางได้เลย เช่น
CREATE TABLE MyTransactionLogs
(
myKey INT AUTO_INCREMENT NOT NULL
myIndex TIMESTAMP NOT NULL
data1 VARCHAR(100)
data2 VARCHAR(100)
data3 VARCHAR(100)
etc VARCHAR(255)
PRIMARY KEY(myKey)
INDEX (myIndex)
)
;
2. ถ้าต้องการปรับปรุงตาราง ที่สร้างไปแล้ว เพื่อจัด index ให้ข้อมูลในฟิล์ด myIndex ถ้า myIndex ไม่ได้สั่งให้เป็น index ตั้งแต่ตอนสร้างตาราง ก็สามารถใช้คำสั่ง ข้างล่างนี้ จะทำให้ Query เร็วขึ้นมาก
ALTER TABLE MyTransactionLogs ADD INDEX(myIndex);
การจัดการ index ของตารางที่มมีฐานข้อมูลอยู่แล้ว จะเป็นการนำข้อมูลทั้งหมดของฟิล์ดที่เราต้องการจัด index มาจัดเรียง ทำให้เราต้องเสียพื้นที่(disk space) ในการจัดเก็บข้อมูลเพิ่มขึ้น ดังนั้นจึงไม่ควรจัด index ให้กับทุกฟิล์ดในตาราง ซึ่ง Field ที่ควรจัดเก็บควรมีคุณสมบัติดังต่อไปนี้
- Field ที่ใช้เป็นเงื่อนไขในการค้นหาข้อมูล (เวลา query อยู่หลัง WHERE ก็คือ Field ที่ควรทำ Index)
- จัด index ให้กับฟิล์ดที่ใช้ในการจัดเรียง (GROUP BY, ORDER BY)
- จัด index ให้กับ Foreign Keys ที่เราเอาไว้ JOIN
โดยขณะที่กำลังจัด index อยู่ ตารางจะถูก locked ไว้ เพื่อไม่ให้ใครมา insert/update/delete ได้ ถ้าตารางข้อมูลกำลังรันอยู่ที่ production และต้องมีการใช้งานอยู่ตลอดเวลา คุณอาจจะเลี่ยงไปทำตอนที่มี traffic การใช้งานน้อย เช่น ช่วงตี 3 - ตี 4 ซึ่งเป็นช่วงนี้ traffic น้อยที่สุด
2 comments:
ขอบคุณครับ ที่ให้ข้อมูลแบบเข้าใจง่ายๆ
ขอบคุณครับ
Post a Comment