我想知道“位图堆扫描”的原理,我知道这经常发生 当我使用 OR在条件下执行查询时。
OR
谁能解释“位图堆扫描”背后的原理?
最好的解释来自于 来自汤姆 · 莱恩,它是算法的作者,除非我弄错了。
简而言之,这有点像连续扫描。区别在于,位图索引不是访问每个磁盘页,而是将 AND 和 OR 应用索引扫描在一起,并且只访问它需要访问的磁盘页。
这与索引扫描不同,后者是按顺序逐行访问索引的——这意味着可以多次访问磁盘页。
回复: 你评论中的问题... 是的,就是这个问题。
索引扫描将逐行浏览,一次又一次地打开磁盘页,根据需要多次打开(当然,有些将保留在内存中,但您可以理解)。
位图索引扫描将依次打开一个磁盘页的短列表,并获取每个页中的每个适用行(因此在查询计划中可以看到所谓的重新检查条件)。
顺便说一句,集群/行顺序如何影响这两种方法的相关成本。如果行以随机顺序排列,位图索引将更便宜。(事实上,如果它们真的是 所有,那么一个 seq 扫描将是最便宜的,因为一个位图索引扫描并不是没有开销的。)