Answers:
最好的解释来自算法的作者汤姆·莱恩(Tom Lane),除非我误会。另请参阅维基百科文章。
简而言之,它有点像seq扫描。区别在于,位图索引不是将所有磁盘页面都访问,而是将AND和OR的适用索引一起扫描,并且仅访问其需要的磁盘页面。
这与索引扫描不同,在索引扫描中,索引是按行逐行访问的,这意味着磁盘页面可能会被多次访问。
回复:您评论中的问题...是的,就是这样。
索引扫描将一次一行地遍历行,并在必要时一次又一次地打开磁盘页(当然,某些行将保留在内存中,但您可以理解)。
位图索引扫描将依次打开一个磁盘页面的简短列表,并抓住每个磁盘页面中的所有适用行(因此,您在查询计划中看到的所谓的重新检查条件)。
注意,顺便说一句,聚类/行顺序如何影响这两种方法的相关成本。如果行以随机顺序遍历所有位置,则位图索引将更便宜。(而且,事实上,如果他们真的所有的地方,一个序列扫描将是最便宜的,因为一个位图索引扫描也不是没有一些开销。)
index-only scan
在查询中仅访问索引列的时间。在这种情况下,index-only scan
不需要访问堆(数据页)数据:postgresql.org/docs/12/indexes-index-only-scans.html