มีผลเสียแน่นอนครับ เพราะ query optimizer ของ MySQL ไม่ฉลาดพอที่จะตัดสินใจได้อย่างแม่นยำว่าใช้ index แล้วจะทำให้เร็วขึ้นหรือเปล่า สำหรับข้อมูลที่มีความหลายหลายต่ำ การค้นหาใน index แล้วนำไปเทียบกับตารางจริงอาจจะช้ากว่าก็เป็นได้ครับ
วิธีดูง่ายๆ ว่าควรจะใช้ index หรือเปล่าก็เช็ค selectivity ด้วยการสั่ง
SELECT COUNT(DISTINCT column)/COUNT(column) FROM table
ยิ่งใกล้ 1 เท่าไหร่ ยิ่งควรทำ index ขึ้นเท่านั้นครับ
เวลา update หรือ insert ข้อมูลที่ใช้สร้าง index ขึ้นมา จะต้องเพิ่ม record ลงไปในตารางและเพิ่ม record เข้าไปใน index ด้วยนะครับ
ถ้า index เยอะมากจนเกินไปจะทำให้กระบวนการแบบนี้ช้าลงนะครับ
กินแรม
แต่คุณทำถูกแล้วครับ
มีผลเสียแน่นอนครับ เพราะ query optimizer ของ MySQL ไม่ฉลาดพอที่จะตัดสินใจได้อย่างแม่นยำว่าใช้ index แล้วจะทำให้เร็วขึ้นหรือเปล่า สำหรับข้อมูลที่มีความหลายหลายต่ำ การค้นหาใน index แล้วนำไปเทียบกับตารางจริงอาจจะช้ากว่าก็เป็นได้ครับ
วิธีดูง่ายๆ ว่าควรจะใช้ index หรือเปล่าก็เช็ค selectivity ด้วยการสั่ง
ยิ่งใกล้ 1 เท่าไหร่ ยิ่งควรทำ index ขึ้นเท่านั้นครับ
เวลา update หรือ insert ข้อมูลที่ใช้สร้าง index ขึ้นมา จะต้องเพิ่ม record ลงไปในตารางและเพิ่ม record เข้าไปใน index ด้วยนะครับ
ถ้า index เยอะมากจนเกินไปจะทำให้กระบวนการแบบนี้ช้าลงนะครับ
ขึ้นอยู่กับว่าโดยปกติแล้วทำงานแบบไหนมากกว่ากัน
ขึ้นอยู่กับวิธีใช้ข้อมูลด้วยว่าเป็น read-only / add-only / add-delete รึป่าว เพราะมีผลต่อการปรับ index ด้วยนะครับ
อีกประเด็นคือความถี่ในการอัพเดทข้อมูล ถ้า read-only เยอะๆ update นานๆครั้ง index ก็จะช่วยได้มาก แต่ในทางกลับกัน index จะทำให้เปลืองมากกว่าครับ
{$user} was not an Imposter