查询计划中的“位图堆扫描”是什么?

我想知道“位图堆扫描”的原理,我知道这种情况经常发生
当我使用条件中的执行查询时

谁能解释“位图堆扫描”背后的原理

最好的解释来自Tom Lane,他是算法的作者,除非我弄错了。另见维基百科文章

简而言之,这有点像序列扫描。不同之处在于,位图索引不是访问每个磁盘页,而是同时扫描和ORs适用的索引,并且只访问它需要访问的磁盘页

这与索引扫描不同,索引是按顺序逐行访问的,这意味着磁盘页面可能会被访问多次


回复:你评论中的问题。。。是的,就是这样

索引扫描将一行一行地扫描,一次又一次地打开磁盘页面,次数视需要而定(当然有些页面会保留在内存中,但你明白了这一点)

位图索引扫描将按顺序打开磁盘页面的短列表,并获取每一行中的每一行(因此在查询计划中可以看到所谓的重新检查条件)

请注意,作为旁白,集群/行顺序如何影响这两种方法的相关成本。如果各行按随机顺序排列,位图索引将更便宜。(而且,事实上,如果它们真的是全部,那么seq扫描将是最便宜的,因为位图索引扫描并非没有一些开销。)

发表评论