Articles Comments

Oracle DBA & All IT » Tuning Performance » เทคนิคการเลือก Index อย่างไรให้ work

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

       หลายครั้งมักจะมีคำถามว่าใช้ index แล้วทำไมถึงยังช้า ไหนว่าใช้ index แล้วจะช่วยให้การดึงข้อมูลเร็วขึ้น เราได้ฟังก็อ้าว… ทฤษฎีว่าอย่างนั้นนะ แต่เอ๊ะ ขอดูหน่อยซิว่า index ที่ว่าเป็นยังไง

พอเราดูก้ถึงถึงบ้างอ้อเลย..พระเจ้า Table มีข้อมูลเป็นล้าน Column ที่เลือกใช้สร้าง index เป็นค่าที่มีใน Table 2 ค่า T,F เราก็โอ้ว .. รู้แระ ทำไม ไม่ได้สิ ไม่ถูกต้องหลักการเลือก Index ต้องเอา Column ที่มีค่า distinct (ค่าที่ไม่ซ้ำกัน) เยอะๆๆ สิถึงจะถูก ถ้าจำเป็นต้อง where ด้วย column ที่มีค่าไม่ซ้ำแค่ 2 ค่า หรือน้อยมากๆ ก็แนะนำเลยค่ะ ว่าอ่าน Full table ไปเลยดีกว่าเร็วกว่าแน่นอน โดยสามารถนำสูตรด้านล่างไปลองคำนวณและเลือก Index ที่ดีกันมาใช้ดีกว่า

 การเลือก index มีสูตรตามนี้   DISTINCT_KEYS / NUM_ROWS
โดย column ที่เราเลือกควรจะเป็นค่าที่ไม่ซ้ำและไม่เป็นค่า NULL

ตัวอย่างในการเลือก 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

Guideline สำหรับการเลือกหลาย column ทำรวมเป็น 1 Index  (Composite index)
        ให้พิจารณาสร้าง composite index บน column ที่มีการเรียกใช้บ่อยๆ ในการใช้ join table ใน SQL statement

        แต่อย่าลืมว่า index มีผลช่วยเพิ่ม performance ของการ select, update, delete แต่จะทำให้การ insert ช้าลงด้วยเพราะทุกครั้งที่ insert จะต้องคอย sort ทุกครั้งยิ่งมีเยอะๆ เพราะฉะนั้นขอให้เลือก index เฉพาะที่ต้องใช้งานจริงๆ เพื่อที่จะได้ไม่ต้องเปลืองเนื้อที่โดยใช่เหตุด้วย

        หวังว่าบทความนี้จะช่วยให้ความกระจ่างในการเลือก index ไม่บ้างก็น้อยนะคะ ลองนำไปใช้กันดู ถ้าดีไม่ดียังไงก็รบกวนกลับมาแนะนำกันบ้างนะคะ แลกเปลี่ยนความรู้กัน ^^

.. Preview : 17418

Related Search:

  • การใช้ index oracle
  • การสร้าง index oracle
  • การสร้าง index อย่างมีประสิทธิภาพ
  • หลักการ การ Create Index oracle

Written by

บอกเล่าสิ่งที่พบเจอมาในการทำงาน ประสบการณ์การทำงานด้าน DBA ถ่ายทอดกันด้วยภาษาง่ายๆ บ้านๆ " ทุกอย่างไม่อยาก แต่... แค่ตั้งใจไม่พอ ต้องลงมือทำ และทำ GoodLuck " Fanpage: www.facebook.com/DBAor .. "Oracle Database Consultant " ..

Filed under: Tuning Performance

  • ก่อนอื่นขอแสดงความชื่นชมกับ blog นี้ก่อนครับ ขอบคุณมากที่แบ่งปันความรู้ให้แก่กัน
    ในส่วนของการพิจารณา index ผมอยากเสริมเกี่ยวกับเรื่องของ clustering factor เรื่องการเรียงตัวของข้อมูลในตารางตาม index key ซึ่งเป็นอืกปัจจัยที่สำคัญในการพิจารณาเลือกใช้ index นอกเหนือจาก selectivity หรือ density ตามสูตรคำนวณที่อธิบายมา
    ลองพิจารณาตัวอย่างนี้นะครับ
    สมมติ ตารางมี 100,000 แถว มีจำนวน block 1,000 blocks หรือประมาณ 100 แถวต่อ block และมี column หนึ่งซึ่งมีจำนวนค่าที่ไม่ซ้ำกัน 100 ค่า ดังนั้นแต่ละค่าจะมีจำนวนแถว ประมาณ 1,000 แถว กรณีแรกให้ 1000 แถวนั้นกระจายอยู่ทั่วทั้ง 1000 block จะเห็นได้ว่าการใช้ index scan ก็ต้องเข้าไปอ่านตารางทุก block เหมือน full scan แถมเพิ่มการอ่าน index เข้าไปอีก ถือว่าได้ไม่คุ้มเสีย
    ส่วนกรณีที่สอง ให้ 1000 แถวนั้น pack ติดกันแล้วเก็บอยู่ใน block เพียง 10 block การอ่านข้อมูลโดยใช้ index scan จะดีกว่าเกือบ 100 เท่า ทั้ง ๆ ที่ selectivity คำนวณได้เท่ากัน
    หวังว่าคงเป็นประโยชน์กับเจ้าของ blog และผู้มาเยี่ยมชมท่านอื่น ๆ นะครับ

    • ขอบคุณมากค่า ที่เข้ามาช่วยเพิ่มเติมให้ เพื่อที่เพื่อนๆที่เข้ามาดูจะได้นำไปพิจารณาใช้ค่ะ ^^

      • The purchesas I make are entirely based on these articles.

    • All of these atrciles have saved me a lot of headaches.

    • Boy that ralely helps me the heck out.

  • With all these silly websites, such a great page keeps my inetrnet hope alive.

  • Yup, that suohld defo do the trick!