Tags:

ซึ่งผมจะกำหนด INDEX ไว้เฉพาะตัวที่ ใช้ในการค้นหา เช่น WHERE salary=30000 ผมก็กำหนด salary เป็น INDEX โดย ทุกตัวที่เกี่ยวข้องกับ where ผมกำหนดหมดทุกตัว

โดยผมอยากจะถามว่า ถ้าผมกำหนดแบบนี้ จะมีข้อเสียอะไรเกิดขึ้นบ้างครับ

Get latest news from Blognone
By: lancaster
Contributor
on 21 May 2009 - 20:49 #103879

กินแรม

แต่คุณทำถูกแล้วครับ

By: sirn
WriteriPhone
on 21 May 2009 - 21:24 #103884

มีผลเสียแน่นอนครับ เพราะ query optimizer ของ MySQL ไม่ฉลาดพอที่จะตัดสินใจได้อย่างแม่นยำว่าใช้ index แล้วจะทำให้เร็วขึ้นหรือเปล่า สำหรับข้อมูลที่มีความหลายหลายต่ำ การค้นหาใน index แล้วนำไปเทียบกับตารางจริงอาจจะช้ากว่าก็เป็นได้ครับ

วิธีดูง่ายๆ ว่าควรจะใช้ index หรือเปล่าก็เช็ค selectivity ด้วยการสั่ง

SELECT COUNT(DISTINCT column)/COUNT(column) FROM table

ยิ่งใกล้ 1 เท่าไหร่ ยิ่งควรทำ index ขึ้นเท่านั้นครับ

By: waiwicha on 22 May 2009 - 00:41 #103941

เวลา update หรือ insert ข้อมูลที่ใช้สร้าง index ขึ้นมา จะต้องเพิ่ม record ลงไปในตารางและเพิ่ม record เข้าไปใน index ด้วยนะครับ
ถ้า index เยอะมากจนเกินไปจะทำให้กระบวนการแบบนี้ช้าลงนะครับ

ขึ้นอยู่กับว่าโดยปกติแล้วทำงานแบบไหนมากกว่ากัน

By: kurosame
ContributoriPhone
on 22 May 2009 - 18:09 #104119
kurosame's picture

ขึ้นอยู่กับวิธีใช้ข้อมูลด้วยว่าเป็น read-only / add-only / add-delete รึป่าว เพราะมีผลต่อการปรับ index ด้วยนะครับ

อีกประเด็นคือความถี่ในการอัพเดทข้อมูล ถ้า read-only เยอะๆ update นานๆครั้ง index ก็จะช่วยได้มาก แต่ในทางกลับกัน index จะทำให้เปลืองมากกว่าครับ


{$user} was not an Imposter