它清楚地说明了位图索引如何与两个可能的值(性别:男性和女性)一起工作。但是如何使用 3 个或更多值呢?谁能解释它在 postgresql 中是如何工作的?
问问题
196 次
1 回答
2
PostgreSQL 没有位图索引,它可以对常规的 B 树索引进行位图索引扫描。
为此,索引列(或列)可以具有多少值并不重要。
这是它的工作原理:
扫描索引以查找搜索条件。
PostgreSQL 不是为找到的每一行访问表,而是构建一个位图。该位图通常每个表行有一位,并且行按物理地址 (
ctid
) 顺序排序。该位的值表示该行是否匹配搜索条件(与索引列的值范围无关)。如果
work_mem
太小而无法包含每行一位的位图,则 PostgreSQL 会降级为每 8KB 页存储一位。这在输出中显示为“有损”条目,EXPLAIN (ANALYZE)
并将导致在下一步影响性能的误报命中。在第二步,位图堆扫描中,PostgreSQL 访问表并获取(并在必要时重新检查)位图中显示命中的所有行。
位图索引扫描的优点是:
即使选择了很多行,PostgreSQL 也只需要访问每个表块一次,并且这些行是按物理顺序访问的。
在扫描表之前,可以将同一表上的多个位图索引扫描与“位图 AND”或“位图 OR”组合。如果每个条件单独的选择性不足以保证索引扫描,这可以有效地处理
OR
s 并将多个条件组合在一起。AND
于 2019-11-30T11:05:53.407 回答