以下は、Postgres 9.6のEXPLAIN ANALYZEの一部です。
-> Bitmap Heap Scan on cities (cost=90.05..806.49 rows=265 width=4) (actual time=4.733..45.772 rows=17 loops=1)
Recheck Cond: (regexp_replace(regexp_replace(replace(replace(replace(replace(lower(name), 'ä'::text, 'ae'::text), 'ö'::text, 'oe'::text), 'ü'::text, 'ue'::text), 'ß'::text, 'ss'::text), 'strasse\M'::text, 'strasse'::text, 'g'::text), '\W'::text, ''::text, 'g'::text) % 'coerde'::text)
Rows Removed by Index Recheck: 567
Heap Blocks: exact=497
-> Bitmap Index Scan on city_lookup_index (cost=0.00..89.98 rows=265 width=0) (actual time=4.229..4.229 rows=584 loops=1)
Index Cond: (regexp_replace(regexp_replace(replace(replace(replace(replace(lower(name), 'ä'::text, 'ae'::text), 'ö'::text, 'oe'::text), 'ü'::text, 'ue'::text), 'ß'::text, 'ss'::text), 'strasse\M'::text, 'strasse'::text, 'g'::text), '\W'::text, ''::text, 'g'::text) % 'coerde'::text)
Rows Removed by Index Recheck
の意味?
または言い換えると、ビットマップは非損失性(exact
ページのみ)なので、再チェックによって(おそらく)削除されたタプルポインターが含まれているのはなぜですか?
一部のインデックス戦略では、タプルが基準を満たしていると断定できません。基準を満たしていない可能性のあるほとんどのタプル(パフォーマンスの向上がもたらされる場所)を確実かつ迅速に排除できますが、合格したタプルの一部は誤検出である可能性があるため、再確認する必要があります。
あなたはgin_trgm_ops
を使用していると思います。これは、そのような索引付け戦略の例です。