-->

วันเสาร์ที่ 25 กุมภาพันธ์ พ.ศ. 2555

Index Strategy


เป็นวิธีที่นิยมที่สุดเพราะมีหลักการที่ง่าย และได้ผลเป็นอย่างมากในการลดระยะเวลาในการ Query ข้อมูล โดยที่ไม่ต้องไปยุ่งเกี่ยวกับ Querey Syntax เลย หลักการของ Index คือการทำให้ Query ตัวเดิมสามารถที่จะ Scan disk น้อยลงเพราะว่าโดยปกติแล้ว เวลาที่ SQL Server ทำงานหรือค้นหาข้อมูลเพื่อให้ได้ผลลัพธ์ตาม Query Syntax นั้น ทาง SQL Server จะใช้ทรัพยากรทั้งหมด (Resources) ไม่ว่าจะเป็น CPU, Disk, Memory, etc. แล้วจุดที่ถือว่าเป็นตัวร้ายที่สุด ก็คือ disk และ Bottle neck ที่ใหญ่ที่สุดเลยคือ Disk ถ้าสามารถหาวิธีลดการ Scan Disk ได้ ย่อมลดปัญหาเรื่อง Bottle neck และทำให้ฐานข้อมูลทำงานเร็วขึ้นอย่างเห็นได้ชัด 

ใน SQL server ก็ทำการแบ่งหน้า (Page) ไว้เก็บข้อมูลเหมือนกัน โดย 1 Page จะมีขนาดเท่ากับ 8KB เสมอ และไม่สามารถแก้ไขได้ แต่ใน Oracle จะสามารถกำหนดขนาดของ Page ได้ ทีนี้ใน 1 page จะเก็บข้อมูลได้กี่ Record ก็ขึ้นอยู่กับความยาวของ Record ตัวอย่างเช่น ถ้า 1 record มีความยาวเท่ากับ 1 KB แสดงว่าใน 1 page สามารถเก็บข้อมูลได้ 8 Records


ตารางข้อมูล (table) ใน MySQL นั้นสามารถเก็บข้อมูลที่มีขนาดใหญ่มากได้ ซึ่งจะทำให้เราดึงข้อมูลได้ช้าลง ในการที่จะทำให้การ query ของเรามีประสิทธิภาพนั้น จะต้องทำการกำหนด  Indexให้กับ table ซึ่งการทำ Index ใน filed นั้น ๆ จะช่วยให้สามารถค้นหาข้อมูลใน filed นั้น ๆ (ที่ถูกกำหนดเป็น Index) ได้อย่างรวดเร็วขึ้น ซึ่ง Index ในMySQL ประกอบไปด้วยชนิดต่าง ๆ ดังนี้
  • NONUNIQUE  Index เป็น Index ที่สามารถมีค่าใน field นั้น ๆ ซ้ำกันหลาย ๆ แถวได้
  • UNIQUE index เป็นการกำหนดว่าค่าของ field  นั้น ๆ จะต้องไม่ซ้ำกันเลยในทุก ๆ เรคอร์ด
  • Primary Key มีลักษณะเช่นเดียวกับ UNIQUE แต่เพิ่มข้อจำกัดบางอย่างเข้าไป (ไม่สามารถเป็นค่าnull ได้
  • Fulltext index เป็นการออกแบบสำหรับการค้นหาข้อความ

 ซึ่งในเรื่องของการสร้างและลบ Indexนี้จะอธิบายถึงเรื่องต่าง ๆ ดังนี้
  • การกำหนด index ขณะสร้าง table ด้วยคำสั่ง CREATE TABLE
  • การใช้ PRIMARY KEY
  • การเพิ่ม Indexใหม่เข้าไปในตารางเดิม ด้วยคำสั่ง ALTER TABLE และ CREATE INDEX
  • การลบ Index จากตาราง ด้วยคำสั่ง ALTER TABLE หรือ DROP INDEX

เทคนิคการเลือก Index อย่างไรให้ดี

การเลือก Index มีสูตรตามนี้  :  DISTINCT_KEYS / NUM_ROWS
โดย column ที่เราเลือกควรจะเป็นค่าที่ไม่ซ้ำและไม่เป็นค่า NULL
เราควรจะกำหนด Index ให้กับ file ที่
  • ถูกนำไปใช้ในการกำหนดเงื่อนไขในการ query ด้วยคำสั่ง where บ่อย ๆ
  • ถูกนำไปใช้ในการเรียงข้อมูลในการ query ด้วยคำสั่ง order by บ่อย ๆ
  • มีค่าที่แตกต่างกันเป็นส่วนมาก (field ที่มีค่าเหมือน ๆ กัน หรือซ้ำกันมาก ๆ ไม่ควรจะนำมากำหนด Index
  • ถูกนำไปใช้ในการ JOIN บ่อย ๆ

ตัวอย่างในการเลือก index ที่ดี

       ถ้า Table ของเรามีข้อมูล 100,000 record และใน column ที่เราต้องการจะนำมาทำ index มี จำนวน 88,000 record ที่มีค่าไม่ซ้ำกัน
       หลังจากนั้นเราเอามาเข้าสูตร  88,000 / 100,000 = 0.88
       โดยถ้าผลลัพธ์เข้าใกล้ 1 เท่าไรก็เข้าข่ายที่เป็น index ที่ดีได้

ตัวอย่างในการเลือก index ที่ไม่ดี

       ถ้า Table ของเรามีข้อมูล 100,000 record และใน column ที่เราต้องการจะนำมาทำ index มี จำนวน 500 record ที่มีค่าไม่ซ้ำกัน
       หลังจากนั้นเราเอามาเข้าสูตร  500 / 100,000 = 0.005
       โดยถ้าผลลัพธ์ออกมาแบบนี้ เราอ่านแบบ full table จะมีประสิทธิภาพมากกว่าการใช้ index เพราะข้อมูลที่เราต้องการนั้นเป็นส่วนมากใน Table

ตัวอย่างการทำ Index

         ข้อมูลที่จะทำการทดสอบต่อไปนี้จะใช้ฐานข้อมูลที่ชื่อว่า employees และใช้ตารางที่ชื่อ employees ซึ่งมีจำนวนข้อมูลภายในตารางทั้งหมด 300,024 แถว



รูปที่ 7 แสดงการ Select ข้อมูลทั้งหมดในตาราง employees

เนื่องจากการทำ index คือการนำ Column ที่มีการใช้งานบ่อยมาทำ ดังนั้นตัวอย่างนี้ได้ทดลองเลือก first_name
มาทดสอบ Index โดยมีขั้นตอนดังนี้


              1.ทดสอบ Query เพื่อดูผลลัพธ์ก่อนการทำ Index




รูปที่ 8 แสดงผลลัพธ์ก่อนทำ Index



         2.ทำการกำหนด Index ให้กับ first_name 



รูปที่ 9 คำสั่ง SQL สำหรับการใส่ Index ให้ first_name



         3.ทดสอบ Query ตามขั้นตอนแรกอีกครั้ง เพื่อดูผลลัพธ์หลังจากการทำ Index



รูปที่ 10 แสดงผลลัพธ์หลังทำ Index
                
         เมื่อเปรียบเทียบก่อนและหลังทำ Index จะพบว่า สามารถช่วยลดระยะเวลาในการ Query ข้อมูลลงไปได้หลายเท่าตัวเลยทีเดียว


ไม่มีความคิดเห็น:

แสดงความคิดเห็น