มาเปรียบเทียบกัน
ขนาดพาร์ติชั่น
หากคุณมีดังต่อไปนี้:
- 100 ล้านแถวในตาราง
- การจัดทำดัชนี BTREE
- แต่ละเพจใน BTREE มี 1024 ปุ่ม
การวัดจะมีลักษณะอย่างไร
เนื่องจาก LOG (100000000) / LOG (2) = 26.575424759099 ดัชนี BTREE ที่มี 1024 คีย์ต่อหน้า treenode จะมีความสูงของต้นไม้เพียง 3 (CEILING (LOG (100000000) / LOG (1024))) ด้วยโหนดเพียงสามหน้าการค้นหาแบบไบนารีสำหรับคีย์ที่จำเป็นในแต่ละ treenode ที่เข้าถึงได้จะส่งผลให้มีการตัดและแยกคีย์ประมาณ 30 คีย์
จำนวนพาร์ทิชัน
หากคุณมีดังต่อไปนี้:
- 100 ล้านแถวในตาราง
- การจัดทำดัชนี BTREE
- แต่ละเพจใน BTREE มี 1024 ปุ่ม
- คุณสร้าง 1024 parititions
ตัวเลขจะแตกต่างกันเล็กน้อย
แต่ละพาร์ติชั่นควรมีประมาณ 97656 แถว การวัดจะกลายเป็นอะไรในตอนนี้
เนื่องจาก LOG (97656) / LOG (2) = 16.575421065795 ดัชนี BTREE ที่มี 1024 คีย์ต่อหน้า treenode จะมีความสูงของต้นไม้เพียง 2 (CEILING (LOG (97656) / LOG (1024))) ด้วยโหนดเพจเพียงสองหน้าการค้นหาแบบไบนารี่สำหรับคีย์ที่จำเป็นในแต่ละ treenode ที่เข้าถึงได้จะส่งผลให้มีการตัดและแยกคีย์ประมาณ 20 คีย์
สรุปผลการศึกษา
การแพร่กระจายคีย์เพียงแค่ลบหนึ่งระดับต้นไม้ แต่สร้างดัชนี 1024 หลัก ข้อความค้นหาจะไม่ทราบความแตกต่าง เวลาในการค้นหาอาจมีค่าน้อยที่สุดเมื่อเทียบกับพาร์ติชัน อย่างไรก็ตามตรวจสอบให้แน่ใจว่าข้อมูลทั้งหมดทำงานอยู่ Otheriwse, คุณอาจจะกดปุ่มเพียงไม่กี่พาร์ทิชันในขณะที่พาร์ติชั่นอื่น ๆ ที่มีข้อมูลที่ไม่ค่อยเข้าถึงได้เพียงแค่ใช้พื้นที่และจะไม่เข้าถึงบ่อยพอที่จะปรับแบ่งพาร์ทิชัน คุณอาจมีตัวชี้วัดประสิทธิภาพที่แตกต่างกันเพื่อกังวลเกี่ยวกับสิ่งที่เห็นได้ชัดกว่า (เช่นการจัดเรียงข้อมูลภายในใน XFS , ext3 vs ext4 เป็นต้น) คุณต้องกังวลเกี่ยวกับเอ็นจิ้นการจัดเก็บข้อมูลที่คุณใช้เพราะ:
- การจัดทำดัชนี InnoDB นั้นจะมีความยุ่งเหยิงเล็กน้อยเมื่อเทียบกับ MyISAM เพราะต้องจัดการดัชนีแบบกลุ่ม
- InnoDB ทำการเขียนข้อมูลสองครั้งใน ibdata1 เช่นเดียวกับไฟล์บันทึกปัจจุบัน (ib_logfile0 หรือ ib_logfile1)