มันเป็นอย่างแน่นอน เราพูดคุยกันอย่างละเอียดภายใต้คำถามที่เกี่ยวข้องนี้:
พื้นที่ถูกจัดสรรเป็นทวีคูณMAXALIGN
ซึ่งโดยทั่วไปคือ 8 ไบต์บนระบบปฏิบัติการ 64 บิตหรือ (พบน้อยกว่ามาก) 4 ไบต์บนระบบปฏิบัติการ 32 บิต pg_controldata
หากคุณไม่แน่ใจให้ตรวจสอบ นอกจากนี้ยังขึ้นอยู่กับชนิดข้อมูลของคอลัมน์ที่จัดทำดัชนี (บางประเภทจำเป็นต้องใช้ช่องว่างระหว่างการจัดแนว) และเนื้อหาจริง
โดยทั่วไปดัชนีบนinteger
คอลัมน์สองคอลัมน์ (4 ไบต์แต่ละตัว) โดยทั่วไปจะมีขนาดใหญ่เท่ากับดัชนีของดัชนีเพียงคอลัมน์เดียวโดยที่อีก 4 ไบต์จะหายไปจากการจัดตำแหน่งช่องว่างภายใน
ในกรณีเช่นนี้มีจริงๆข้อเสียไม่มีการวางแผนแบบสอบถามจะใช้ดัชนีใน(a,b)
- (a)
เมื่อเทียบกับดัชนีในเพียง และโดยทั่วไปจะดีกว่าสำหรับหลาย ๆ แบบสอบถามเพื่อใช้ดัชนีเดียวกัน โอกาสที่มัน (หรือบางส่วนของมัน) จะอยู่ในแคช (เร็ว) จะเพิ่มขึ้นเมื่อมีการแชร์
หากคุณยังคงมีดัชนีอยู่(a,b)
แล้วมันไม่เหมาะสมที่จะสร้างดัชนีใหม่ในเพียง(a)
- เว้นแต่จะมีขนาดเล็กลงอย่างมาก เช่นเดียวกับไม่จริงสำหรับเทียบกับ(b,a)
(a)
ติดตามลิงค์ในบรรทัดแรกเพื่อดูข้อมูลเพิ่มเติม
มาจากทิศทางตรงข้ามเมื่อคุณต้องการดัชนีเพิ่มเติมเช่นนั้นเปิด(a,b)
ให้พิจารณาปล่อยดัชนีที่มีอยู่ใน(a)
กรณีที่เป็นไปได้ บ่อยครั้งที่เป็นไปไม่ได้เนื่องจากดัชนีของ PK หรือUNIQUE
ข้อ จำกัด ตั้งแต่ Postgres 11 คุณอาจหนีด้วยการต่อท้ายb
นิยามข้อ จำกัด ที่มีส่วนINCLUDE
คำสั่งแทน รายละเอียดในคู่มือ
หรือสร้างดัชนีใหม่(b,a)
แทนเพื่อครอบคลุมการสืบค้นb
เพิ่มเติม สำหรับเงื่อนไขความเท่าเทียมกันเท่านั้นลำดับของนิพจน์ดัชนีในดัชนี btree ไม่สำคัญ แม้ว่ามันจะเกี่ยวข้องกับเงื่อนไขของช่วง ดู:
มีข้อเสียที่เป็นไปได้ที่จะรวมคอลัมน์เพิ่มเติมในดัชนีแม้ว่าจะใช้พื้นที่เพียงอย่างเดียวเท่านั้น
- เมื่อใดก็ตามที่มีการอัปเดตคอลัมน์เพิ่มเติมตอนนี้ดัชนีต้องการการอัปเดตเช่นกันซึ่งอาจเพิ่มค่าใช้จ่ายในการเขียนการดำเนินการและสร้างดัชนีขยายตัวมากขึ้น
- การอัปเดตที่น่าสนใจ (Heap Only Tuple) บนตารางไม่สามารถทำได้ในขณะที่คอลัมน์ดัชนีใด ๆ ที่เกี่ยวข้อง
เพิ่มเติมเกี่ยวกับการปรับปรุง HOT:
วิธีการวัดขนาดวัตถุ: