ความแตกต่างระหว่างสารเติมเต็มตารางและสารเติมดัชนี


16

ใน Postgres หนึ่งสามารถตั้งค่า fillfactor สำหรับดัชนีเช่นเดียวกับตาราง อะไรคือความแตกต่าง? วิธีการตัดสินใจค่าสำหรับทั้ง อะไรคือสิ่งที่ usecases?

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

กรณีการใช้งานเป็นแบบสอบถามช่วงเชิงพื้นที่ สิ่งที่จะเป็นค่าที่ดีสำหรับสารตัวเติมตารางและ / หรือสารตัวเติมดัชนี

คำตอบ:


12

จากหน้าคู่มือ CREATE TABLE (เน้นการเพิ่ม):

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

จากหน้าคู่มือ CREATE INDEX (เน้นการเพิ่ม):

ตัวกรองสำหรับดัชนีคือเปอร์เซ็นต์ที่กำหนดว่าวิธีการดัชนีแบบเต็มจะพยายามแพ็คหน้าดัชนีได้อย่างไร สำหรับ B-trees หน้าใบไม้จะถูกเติมเต็มเป็นเปอร์เซ็นต์นี้ระหว่างการสร้างดัชนีเริ่มต้นและเมื่อขยายดัชนีทางด้านขวา (ค่าคีย์ที่ใหญ่ที่สุด) หากหน้าเว็บเต็มอย่างสมบูรณ์ในภายหลังเพจเหล่านั้นจะถูกแยกออกซึ่งนำไปสู่การลดประสิทธิภาพของดัชนีB-trees ใช้ฟิลเลอร์เริ่มต้นที่ 90 แต่สามารถเลือกค่าใดก็ได้ตั้งแต่ 10 ถึง 100 ถ้าตารางเป็นค่าคงที่ตัวเติมจะเป็น 100 ได้ดีที่สุดเพื่อลดขนาดทางกายภาพของดัชนี แต่สำหรับตารางที่มีการปรับปรุงอย่างมากตัวกรองขนาดเล็กจะดีกว่าเพื่อลดความต้องการแบ่งหน้า วิธีการอื่น ๆ ที่ใช้ดัชนี fillfactor ในวิธีต่าง ๆ แต่คล้ายคลึงกันคร่าว ๆ ; ฟิลเลอร์เริ่มต้นแตกต่างกันไประหว่างวิธีการ


1
เป็นเรื่องธรรมดาที่จะกล่าวถึงแหล่งที่มาของคำพูด แม้ว่าจะเป็นเรื่องง่ายที่จะคิดออก
Erwin Brandstetter

ใช่แน่นอน) ลืมบางครั้ง ...

ขออภัยที่ต้องจู้จี้เพิ่มเติม โปรดเชื่อมโยงไปยังคู่มือเวอร์ชันปัจจุบัน (เว้นแต่คุณจะต้องระบุที่อยู่เฉพาะ) ฉันแก้ไข เพิ่มเติมเกี่ยวกับที่นี่
Erwin Brandstetter

ลิงก์ย้อนกลับ
Dave Johansen

2
Re: "ถ้าตารางเป็นแบบคงที่แล้ว fillfactor 100 จะดีที่สุดเพื่อลดขนาดทางกายภาพของดัชนี แต่สำหรับตารางที่มีการปรับปรุงอย่างมากตัวกรองขนาดเล็กจะดีกว่าเพื่อลดความจำเป็นในการแยกหน้า" พยายามที่จะเข้าใจบริบทของ "ตารางที่มีการปรับปรุงอย่างมาก" - นั่นหมายถึงตารางที่มีค่าแถวที่มีการปรับปรุงอย่างมากหรืออาจรวมถึงตารางที่มีแถวที่แทรกและ / หรือลบบ่อยครั้งหรือไม่ ฉันต้องการทราบว่าตารางของฉันมีการเปลี่ยนแปลงค่าแถวบ้างเล็กน้อย แต่มีการแทรกและลบอย่างกว้างขวางอาจได้รับประโยชน์จากสารตัวเติมที่ต่ำกว่าในดัชนีหลัก (หลัก)
Reinsbrain
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.