web-dev-qa-db-ja.com

「不可逆」のない「インデックス再チェックによって削除された行」とはどういう意味ですか?

以下は、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ページのみ)なので、再チェックによって(おそらく)削除されたタプルポインターが含まれているのはなぜですか?

3
AndreKR

一部のインデックス戦略では、タプルが基準を満たしていると断定できません。基準を満たしていない可能性のあるほとんどのタプル(パフォーマンスの向上がもたらされる場所)を確実かつ迅速に排除できますが、合格したタプルの一部は誤検出である可能性があるため、再確認する必要があります。

あなたはgin_trgm_opsを使用していると思います。これは、そのような索引付け戦略の例です。

5
jjanes