นี่คือการแยกความคิดเห็นจากคำถามก่อนหน้า:
ใช้ PostgreSQL 9.4 มีเสมอดูเหมือนว่าจะเป็นสายหลังจากสแกนดัชนีบิตแมปในการส่งออกแผนแบบสอบถามโดยRecheck Cond:
EXPLAIN
กดไลค์ในEXPLAIN
ผลลัพธ์ของคำถามอ้างอิง:
-> Bitmap Heap Scan on table_three (cost=2446.92..19686.74 rows=8159 width=7) Recheck Cond: (("timestamp" > (now() - '30 days'::interval)) AND (client_id > 0)) -> BitmapAnd (cost=2446.92..2446.92 rows=8159 width=0) -> Bitmap Index Scan on table_one_timestamp_idx (cost=0.00..1040.00 rows=79941 width=0) Index Cond: ("timestamp" > (now() - '30 days'::interval)) -> Bitmap Index Scan on fki_table_three_client_id (cost=0.00..1406.05 rows=107978 width=0) Index Cond: (client_id > 0)
หรือในผลลัพธ์ของEXPLAIN ANALYZE
การสร้างตารางขนาดใหญ่ที่เรียบง่าย (มีน้อยมากwork_mem
):
EXPLAIN ANALYZE SELECT * FROM aa WHERE a BETWEEN 100000 AND 200000;
Bitmap Heap Scan on aa (cost=107.68..4818.05 rows=5000 width=4) (actual time=27.629..213.606 rows=100001 loops=1) Recheck Cond: ((a >= 100000) AND (a <= 200000)) Rows Removed by Index Recheck: 758222 Heap Blocks: exact=693 lossy=3732 -> Bitmap Index Scan on aai (cost=0.00..106.43 rows=5000 width=0) (actual time=27.265..27.265 rows=100001 loops=1) Index Cond: ((a >= 100000) AND (a <= 200000))
นั่นหมายความว่าจะต้องตรวจสอบเงื่อนไขดัชนีเป็นครั้งที่สองหลังจากการสแกนดัชนีบิตแมปหรือไม่?
เราสามารถเรียนรู้อะไรอีกจากEXPLAIN
ผลลัพธ์