การทำดัชนีใน DBMS: คืออะไร ประเภทของดัชนีพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

การทำดัชนีในฐานข้อมูลเป็นเทคนิคโครงสร้างข้อมูลที่ช่วยให้ดึงข้อมูลระเบียนได้อย่างรวดเร็วโดยใช้แผนที่ping คีย์ค้นหาไปยังที่อยู่บนดิสก์ของระเบียนนั้น ดัชนีแบบหลัก แบบรอง แบบคลัสเตอร์ แบบหลายระดับ และแบบบีทรี แต่ละแบบมีพื้นที่ใช้งาน ความเร็ว และการบำรุงรักษาที่แตกต่างกัน

  • 🗂️ แนวคิดหลัก: ดัชนีคือตารางขนาดเล็กที่มีสองคอลัมน์ โดยจับคู่คีย์กับตัวชี้ไปยังบล็อกดิสก์ของระเบียนนั้น
  • 📇 ดัชนีหลัก: ไฟล์ที่จัดเรียงตามลำดับบนคีย์ โดยแบ่งออกเป็นแบบหนาแน่นและแบบเบาบาง
  • 🔎 หนาแน่น vs เบาบาง: ดัชนีแบบหนาแน่นจะเก็บข้อมูลหนึ่งรายการต่อหนึ่งคีย์ ในขณะที่ดัชนีแบบเบาบางจะเก็บข้อมูลจำนวนน้อยกว่าเพื่อประหยัดพื้นที่
  • 🏷️ ดัชนีรอง: ระบบนี้สร้างขึ้นบนฟิลด์ที่ไม่เรียงลำดับ และใช้กลุ่มข้อมูลเพื่อค้นหาระเบียนที่ตรงกันทั้งหมด
  • 📚 Clusterดัชนี: จัดกลุ่มแถวที่มีคีย์ที่ไม่ซ้ำกันไว้ในคลัสเตอร์เดียวกัน
  • 🌳 ดัชนี B-Tree: โครงสร้างต้นไม้หลายระดับที่สมดุล ซึ่งโหนดใบที่เชื่อมโยงกันนั้นรองรับการเข้าถึงแบบสุ่มและแบบเรียงลำดับ
  • 🇧🇷 การแลกเปลี่ยน: ดัชนีช่วยเพิ่มความเร็วในการอ่าน แต่ทำให้การแทรก การอัปเดต และการลบช้าลง และยังใช้พื้นที่เพิ่มขึ้นอีกด้วย

การจัดทำดัชนีในฐานข้อมูล

การทำดัชนีคืออะไร?

การจัดทำดัชนี ดัชนีเป็นเทคนิคโครงสร้างข้อมูลที่ช่วยให้คุณสามารถดึงข้อมูลจากไฟล์ฐานข้อมูลได้อย่างรวดเร็ว ดัชนีเป็นตารางขนาดเล็กที่มีเพียงสองคอลัมน์ คอลัมน์แรกประกอบด้วยสำเนาของคีย์หลักหรือคีย์ผู้สมัครของตาราง คอลัมน์ที่สองประกอบด้วยชุดของ ชี้ ซึ่งเก็บที่อยู่ของบล็อกดิสก์ที่เก็บค่าคีย์เฉพาะนั้นไว้

สารบัญ:

  • รับคีย์ค้นหาเป็นอินพุต
  • ส่งคืนคอลเลกชันของเรกคอร์ดที่ตรงกันอย่างมีประสิทธิภาพ

หากไม่มีดัชนี ฐานข้อมูลจะต้องสแกนทุกแถวเพื่อตอบคำถาม แต่หากมีดัชนี ฐานข้อมูลจะข้ามไปยังบล็อกที่ตรงกันโดยตรง ซึ่งเป็นเหตุผลว่าทำไมประเภทของดัชนีที่เลือกจึงมีผลอย่างมากต่อประสิทธิภาพ

ประเภทของการจัดทำดัชนีใน DBMS

ประเภทของดัชนีในฐานข้อมูล
ประเภทของดัชนีในฐานข้อมูล

การสร้างดัชนีในฐานข้อมูลนั้นกำหนดขึ้นจากคุณลักษณะของการสร้างดัชนี วิธีการสร้างดัชนีหลักๆ มีสองประเภท ได้แก่:

  • การจัดทำดัชนีเบื้องต้น
  • การจัดทำดัชนีรอง

ดัชนีหลักใน DBMS

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

ดัชนีหลักยังแบ่งออกเป็นสองประเภทเพิ่มเติมอีกด้วย:

  • ดัชนีหนาแน่น
  • ดัชนีกระจัดกระจาย

ดัชนีหนาแน่น

ในดัชนีแบบหนาแน่น จะมีการสร้างเรคอร์ดสำหรับทุกค่าของคีย์ค้นหาในฐานข้อมูล วิธีนี้ช่วยให้คุณค้นหาได้เร็วขึ้น แต่ต้องการพื้นที่มากขึ้นในการจัดเก็บเรคอร์ดดัชนี ในวิธีนี้ เรคอร์ดจะประกอบด้วยค่าของคีย์ค้นหาและชี้ไปยังเรคอร์ดจริงบนดิสก์

ดัชนีหนาแน่นในระบบจัดการฐานข้อมูล

ดัชนีกระจัดกระจาย

ดัชนีแบบเบาบาง (Sparse index) คือระเบียนดัชนีที่ปรากฏเฉพาะสำหรับบางค่าในไฟล์เท่านั้น ดัชนีแบบเบาบางช่วยแก้ปัญหาของดัชนีแบบหนาแน่น (Dense indexing) ได้ DBMSในเทคนิคนี้ ช่วงของคอลัมน์ดัชนีจะจัดเก็บที่อยู่บล็อกข้อมูลเดียวกัน และเมื่อต้องการดึงข้อมูล ที่อยู่บล็อกนั้นจะถูกดึงมาใช้

ดัชนีแบบเบาบาง (Sparse Index) จัดเก็บระเบียนดัชนีสำหรับค่าคีย์ค้นหาเพียงบางค่าเท่านั้น ใช้พื้นที่น้อยกว่าและมีค่าใช้จ่ายในการบำรุงรักษาน้อยกว่าสำหรับการแทรกและการลบ แต่จะทำงานช้ากว่าดัชนีแบบหนาแน่น (Dense Index) ในการค้นหาระเบียน

ด้านล่างนี้คือตัวอย่างดัชนีฐานข้อมูลแบบสปาร์ส (sparse index)

ดัชนีแบบเบาบางในระบบจัดการฐานข้อมูล

ดัชนีหนาแน่นเทียบกับดัชนีเบาบาง

ดัชนีหลักทั้งสองแบบมีข้อดีข้อเสียที่ตรงกันข้ามกัน ซึ่งสรุปไว้ด้านล่างนี้

แง่มุม ดัชนีหนาแน่น ดัชนีกระจัดกระจาย
รายการ หนึ่งรายการต่อคีย์การค้นหา หนึ่งชิ้นต่อบล็อก
ช่องว่าง เพิ่มเติม Less
ความเร็วในการค้นหา ได้เร็วขึ้น ช้าลง
ซ่อมบำรุง สูงกว่า ลด

ดัชนีรองใน DBMS

ดัชนีรองในระบบจัดการฐานข้อมูล (DBMS) สามารถสร้างขึ้นได้จากฟิลด์ที่มีค่าเฉพาะตัวสำหรับแต่ละระเบียน และควรเป็นคีย์หลัก (candidate key) เรียกอีกอย่างว่าดัชนีที่ไม่จัดกลุ่ม (non-clustering index)

เทคนิคการจัดทำดัชนีฐานข้อมูลสองระดับนี้ใช้เพื่อลดขนาดของแผนที่ping ขนาดของระดับแรก สำหรับระดับแรก จะมีการเลือกช่วงตัวเลขขนาดใหญ่ ดังนั้นแผนที่ping ขนาดจะยังคงเล็กอยู่เสมอ

ตัวอย่างดัชนีรอง

เรามาทำความเข้าใจเรื่องการทำดัชนีรองด้วยตัวอย่างดัชนีฐานข้อมูลกัน ในฐานข้อมูลบัญชีธนาคาร ข้อมูลจะถูกจัดเก็บตามลำดับโดยใช้หมายเลขบัญชี แต่คุณอาจต้องการค้นหาบัญชีทั้งหมดในสาขาเฉพาะของธนาคาร ABC

ในส่วนนี้ คุณสามารถสร้างดัชนีรองสำหรับแต่ละคีย์การค้นหาได้ โดยระเบียนดัชนีจะชี้ไปยังบัคเก็ตที่ประกอบด้วยตัวชี้ไปยังระเบียนทั้งหมดที่มีค่าคีย์การค้นหานั้นๆ

ดัชนีรองในระบบจัดการฐานข้อมูล

Clusterการทำดัชนีใน DBMS

ในดัชนีแบบคลัสเตอร์ ข้อมูลจริงจะถูกจัดเก็บไว้ในดัชนี ไม่ใช่ตัวชี้ บางครั้งดัชนีถูกสร้างขึ้นบนคอลัมน์ที่ไม่ใช่คีย์หลัก ซึ่งอาจไม่ซ้ำกันสำหรับแต่ละข้อมูล ในกรณีเช่นนี้ คุณสามารถจัดกลุ่มคอลัมน์สองคอลัมน์ขึ้นไปเพื่อให้ได้ค่าที่ไม่ซ้ำกันและสร้างดัชนี ซึ่งเรียกว่าดัชนีแบบคลัสเตอร์ วิธีนี้ช่วยให้คุณระบุข้อมูลได้เร็วขึ้นเช่นกัน

ตัวอย่าง: สมมติว่าบริษัทแห่งหนึ่งได้ว่าจ้างพนักงานจำนวนมากในแผนกต่างๆ ในกรณีนี้ จำเป็นต้องสร้างดัชนีการจัดกลุ่มสำหรับพนักงานทั้งหมดที่อยู่ในแผนกเดียวกัน

ถือว่าเป็นคลัสเตอร์เดียวกัน และดัชนีชี้ไปยังคลัสเตอร์โดยรวม ในที่นี้ Department_no เป็นคีย์ที่ไม่ซ้ำกัน

ดัชนีหลายระดับคืออะไร?

การสร้างดัชนีแบบหลายระดับเกิดขึ้นเมื่อดัชนีหลักไม่สามารถจัดเก็บในหน่วยความจำได้ วิธีการสร้างดัชนีแบบนี้ช่วยลดจำนวนการเข้าถึงดิสก์เพื่อเข้าถึงข้อมูลแต่ละเรคอร์ดได้ ข้อมูลจะถูกเก็บไว้ในดิสก์ในรูปแบบไฟล์เรียงลำดับ และจะสร้างดัชนีแบบเบาบาง (sparse index) ทับซ้อนอยู่บนไฟล์นั้น

ดัชนีหลายระดับในระบบจัดการฐานข้อมูล

ดัชนีบีทรี

ดัชนีแบบ B-tree เป็นโครงสร้างข้อมูลที่ใช้กันอย่างแพร่หลายที่สุดสำหรับการทำดัชนีแบบต้นไม้ในระบบจัดการฐานข้อมูล (DBMS) เป็นรูปแบบการทำดัชนีแบบต้นไม้หลายระดับที่ใช้ความสมดุล ต้นไม้ค้นหาแบบไบนารีโหนดใบทั้งหมดของ B-tree จะเก็บตัวชี้ข้อมูลจริงไว้

นอกจากนี้ โหนดใบทั้งหมดเชื่อมโยงกันด้วยรายการเชื่อมโยง ซึ่งทำให้ B-tree สามารถรองรับการเข้าถึงได้ทั้งแบบสุ่มและแบบเรียงลำดับ

ดัชนี B-tree ในระบบจัดการฐานข้อมูล

  • โหนดใบต้องมีค่าระหว่าง 2 ถึง 4 ค่า
  • เส้นทางจากรากถึงใบส่วนใหญ่มีความยาวเท่ากัน
  • โหนดที่ไม่ใช่ใบนอกจากโหนดรากจะมีโหนดลูกระหว่าง 3 ถึง 5 โหนด
  • โหนดทุกโหนดที่ไม่ใช่โหนดรากหรือโหนดใบจะมีโหนดลูกระหว่าง n/2 ถึง n โหนด

ในกรณีที่การค้นหาแบบตรงกันทุกประการเป็นที่นิยม และการค้นหาแบบช่วงค่ามีน้อย hashing อาจเป็นทางเลือกที่เร็วกว่าดัชนีแบบ B-tree

ข้อดีของการจัดทำดัชนี

ข้อดีที่สำคัญของการจัดทำดัชนีมีดังนี้:

  • วิธีนี้ช่วยลดจำนวนการดำเนินการ I/O โดยรวมที่จำเป็นในการดึงข้อมูล ดังนั้นคุณจึงไม่จำเป็นต้องเข้าถึงแถวโดยตรงจากตาราง
  • ช่วยให้ผู้ใช้สามารถค้นหาและเรียกดูข้อมูลได้รวดเร็วยิ่งขึ้น
  • วิธีนี้จะช่วยลดพื้นที่จัดเก็บข้อมูล เนื่องจากไม่จำเป็นต้องเก็บ ROWID ไว้ในดัชนีสำหรับทุกแถวที่เชื่อมโยงกัน
  • ข้อมูลในโหนดใบจะถูกจัดเรียงตามค่าของคีย์เรียบร้อยแล้ว

ข้อเสียของการจัดทำดัชนี

ข้อเสียที่สำคัญของการทำดัชนีมีดังนี้:

  • ในการสร้างดัชนี คุณต้องมีคีย์หลักในตารางที่มีค่าที่ไม่ซ้ำกัน
  • คุณไม่สามารถสร้างดัชนีใหม่บนข้อมูลที่จัดระเบียบด้วยดัชนีแบบเดียวกันอยู่แล้วได้
  • คุณไม่ได้รับอนุญาตให้แบ่งพาร์ติชันตารางที่จัดดัชนี
  • การสร้างดัชนีจะลดประสิทธิภาพในคำสั่ง INSERT, DELETE และ UPDATE

คำถามที่พบบ่อย

ดัชนีหลักสร้างขึ้นจากฟิลด์ที่ใช้เรียงลำดับไฟล์ ซึ่งโดยปกติจะเป็นคีย์หลัก ส่วนดัชนีรองสร้างขึ้นจากฟิลด์ที่แตกต่างออกไป ดังนั้นจึงจำเป็นต้องมีบัคเก็ตเพื่อเข้าถึงทุกระเบียนที่ตรงกัน

โครงสร้างข้อมูลแบบ B-tree จะรักษาความสมดุล ดังนั้นการค้นหาแต่ละครั้งจึงใช้จำนวนการอ่านจากดิสก์ที่น้อยและใกล้เคียงกัน และใบที่เชื่อมโยงกันจะรองรับการสแกนช่วง ทำให้โครงสร้างนี้มีความแข็งแกร่งทั้งสำหรับการค้นหาแบบระบุจุดและแบบระบุช่วง

ทุกการแทรก การอัปเดต และการลบ จะต้องรักษาดัชนีแต่ละรายการไว้ด้วย ดัชนีที่มากขึ้นจะช่วยเพิ่มความเร็วในการอ่าน แต่จะเพิ่มภาระการเขียนและพื้นที่จัดเก็บ ดังนั้นจึงควรสร้างดัชนีเฉพาะในกรณีที่การค้นหาข้อมูลได้รับประโยชน์จากดัชนีเหล่านั้นจริงๆ เท่านั้น

ระบบ AI ที่ปรึกษาด้านดัชนีจะศึกษาปริมาณงานการค้นหาข้อมูลและแนะนำดัชนีที่จะช่วยลดต้นทุนได้มากที่สุด พร้อมทั้งชี้ให้เห็นดัชนีที่มีอยู่ซึ่งไม่เคยถูกใช้งานและเพิ่มภาระงานโดยไม่จำเป็น

ดัชนีแบบคลัสเตอร์จะจัดเก็บแถวข้อมูลตามลำดับดัชนี ดังนั้นตารางหนึ่งๆ จะมีดัชนีแบบคลัสเตอร์ได้เพียงหนึ่งเดียว ในขณะที่ดัชนีแบบไม่คลัสเตอร์จะเก็บตัวชี้ไปยังแถวข้อมูล ดังนั้นตารางหนึ่งๆ สามารถมีดัชนีแบบไม่คลัสเตอร์ได้หลายตัว

สรุปโพสต์นี้ด้วย: