ฉันมีตารางที่มีจำนวนมากแทรกการตั้งค่าหนึ่งของฟิลด์ ( uploaded_at
) NULL
เพื่อ จากนั้นภารกิจตามระยะเวลาจะเลือกสิ่งอันดับทั้งหมดWHERE uploaded_at IS NULL
ประมวลผลและอัปเดตตั้งค่าuploaded_at
เป็นวันที่ปัจจุบัน
ฉันควรจัดทำดัชนีตารางอย่างไร
ฉันเข้าใจว่าฉันควรใช้ดัชนีบางส่วนเช่น:
CREATE INDEX foo ON table (uploaded_at) WHERE uploaded_at IS NULL
หรือว่าอย่างนั้น ฉันบิตสับสน NULL
แต่ถ้ามันเป็นสิ่งที่ถูกต้องเพื่อดัชนีในเขตข้อมูลที่อยู่เสมอ หรือถ้ามันถูกต้องที่จะใช้ดัชนี b-tree Hash ดูเหมือนเป็นความคิดที่ดีกว่า แต่ล้าสมัยและไม่ได้รับการจำลองแบบผ่านการสตรีมการจำลองแบบ hot-standby คำแนะนำใด ๆ ที่จะได้รับการชื่นชมอย่างมาก
ฉันได้ทดลองเล็กน้อยด้วยดัชนีต่อไปนี้:
"foo_part" btree (uploaded_at) WHERE uploaded_at IS NULL
"foo_part_id" btree (id) WHERE uploaded_at IS NULL
และตัววางแผนแบบสอบถามดูเหมือนว่าจะเลือกfoo_part
ดัชนีเสมอ explain analyse
ยังให้ผลลัพธ์ที่ดีขึ้นเล็กน้อยสำหรับfoo_part
ดัชนี:
Index Scan using foo_part on t1 (cost=0.28..297.25 rows=4433 width=16) (actual time=0.025..3.649 rows=4351 loops=1)
Index Cond: (uploaded_at IS NULL)
Total runtime: 4.060 ms
VS
Bitmap Heap Scan on t1 (cost=79.15..6722.83 rows=4433 width=16) (actual time=1.032..4.717 rows=4351 loops=1)
Recheck Cond: (uploaded_at IS NULL)
-> Bitmap Index Scan on foo_part_id (cost=0.00..78.04 rows=4433 width=0) (actual time=0.649..0.649 rows=4351 loops=1)
Total runtime: 5.131 ms
id
ฟิลด์อนุกรมได้หรือไม่