การแสดงภาพดัชนีของ SQLite: โครงสร้าง
- ความสำคัญของดัชนี: SQLite เป็น DBMS ที่ถูกใช้อย่างแพร่หลายในเบราว์เซอร์ แอปมือถือ และระบบปฏิบัติการ จึงเหมาะสำหรับการทำความเข้าใจโครงสร้างดัชนีและสำรวจวิธีการจัดเก็บทั้งบนดิสก์และในหน่วยความจำ
โครงสร้างโหนดและเพจ
- โครงสร้าง B-tree: ดัชนีของ SQLite ถูกจัดเก็บในรูปแบบโครงสร้าง B-tree โดยแต่ละโหนดมีโหนดย่อยได้หลายตัว
- เพจและเซลล์: เพจใช้เก็บข้อมูลเซลล์และมีลิงก์ไปยังเพจลูกด้านขวา ส่วนเซลล์ประกอบด้วยข้อมูลดัชนี, rowId และลิงก์ไปยังเพจลูกด้านซ้าย
การวิเคราะห์ซอร์สโค้ดของ SQLite
- ตัวอย่างโค้ด: มีการเขียนฟังก์ชันเพื่อวิเคราะห์ดัชนี ตัวอย่างเช่น ฟังก์ชัน
sqlite3DebugBtreeIndexDump จะอ่านและแสดงผลเนื้อหาของดัชนีที่เลือก
- การใช้ Docker: สามารถใช้ Docker เพื่อทดสอบการดัมป์ดัชนีได้
การแสดงภาพดัชนี
- เครื่องมือแสดงภาพ: มีการพยายามใช้ไลบรารี d3-org-tree เพื่อแสดงภาพโครงสร้างดัชนี แต่การแสดงโครงสร้างเป็นข้อความกลับง่ายกว่า
- PHP ImageMagick: ใช้ส่วนขยาย ImageMagick ของ PHP เพื่อสร้างภาพที่ควบคุมการออกแบบและระยะห่างได้
ตัวอย่างดัชนีหลากหลายแบบ
- ดัชนีพื้นฐาน: ดัชนีแบบเรียบง่ายที่ประกอบด้วย 1 เรคอร์ด
- จำนวนเรคอร์ดที่หลากหลาย: ดัชนีที่มี 1,000 และ 1,000,000 เรคอร์ด
- เปรียบเทียบทิศทางการจัดเรียง: เปรียบเทียบดัชนีที่จัดเรียงแบบ ASC และ DESC
- ข้อมูลที่อิงจากนิพจน์: สร้างดัชนีโดยใช้นิพจน์
- ดัชนีเอกลักษณ์ที่มีค่า NULL: SQLite รองรับดัชนีเอกลักษณ์ที่มีค่า NULL
- ดัชนีบางส่วน: สร้างดัชนีโดยกรองค่า NULL ออก
- ดัชนีหลายคอลัมน์: สร้างดัชนีที่มีหลายคอลัมน์
การปรับแต่งดัชนีให้เหมาะสม
- VACUUM และ REINDEX: คำสั่งที่ใช้เพื่อปรับแต่งดัชนีเดิมให้เหมาะสม
- ข้อมูลข้อความ: สตริงสั้นจะถูกเก็บไว้ในเซลล์ดัชนีโดยตรง ส่วนข้อความยาวจะถูกเก็บแยกต่างหาก
- ข้อมูลทศนิยมลอยตัว: สร้างดัชนีที่มีข้อมูลทศนิยมลอยตัว
บทสรุป
- การเข้าใจโครงสร้างดัชนี: ทำความเข้าใจโครงสร้างดัชนีของ SQLite และวิธีที่ B-tree ใช้จัดเก็บและเข้าถึงข้อมูล
- ความสำคัญของการแสดงภาพ: การแสดงภาพช่วยให้วิเคราะห์และเปรียบเทียบดัชนีหลากหลายแบบได้
- แผนในอนาคต: มีแผนจะแสดงภาพการค้นหาที่อิงดัชนี และสำรวจ SQL query ที่น่าสนใจเพิ่มเติม
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
แต่ละแถวของตาราง SQLite โดยพื้นฐานแล้วจะมี
rowIdที่ไม่ซ้ำกัน ซึ่งทำงานเหมือนคีย์หลักหากไม่ได้กำหนดไว้อย่างชัดเจนrowIdWITHOUT ROWIDrowid) หรือมีข้อมูลอยู่แล้ว (WITHOUT ROWID) ซึ่งสำคัญอย่างยิ่งโดยเฉพาะกับ range queryอยากเห็นว่าระบบจัดการฐานข้อมูล (DBMS) จัดเก็บและค้นคืนดัชนีจากดิสก์และหน่วยความจำอย่างไร
เว็บไซต์อ่านง่ายมาก เลยอยากอ่าน
indexesใช้ได้ทั้งเป็นรูปกริยาปัจจุบันเอกพจน์บุรุษที่สามของto indexและเป็นรูปพหูพจน์ของคำนามindexindicesเป็นรูปพหูพจน์แบบดั้งเดิม ซึ่งใช้บ่อยเป็นพิเศษในคณิตศาสตร์และวิทยาศาสตร์indexesพบบ่อย แต่ในสายเทคนิคมักนิยมindicesเพื่อคงความแม่นยำทางภาษาindicesช่วยแยกความหมายระหว่างการทำ index กับรูปพหูพจน์ของ index ทำให้ชัดเจนขึ้นน่าจะดีถ้าได้ดูว่า PostgreSQL ทำงานเดียวกันนี้อย่างไร แล้วนำมาเปรียบเทียบพร้อมจดบันทึกไว้
สามารถสร้าง tgf สำหรับ yEd เพื่อให้ได้เลย์เอาต์ที่หลากหลายขึ้นด้วยงานที่น้อยลง