fra*_*ncs 99 postgresql indexing sql-execution-plan
我想知道"位图堆扫描"的原理,我知道当我OR在条件中执行查询时经常发生这种情况.
谁能解释"位图堆扫描"背后的原理?
Den*_*rdy 114
最好的解释来自Tom Lane,这是算法的作者,除非我误会.另请参阅维基百科文章.
简而言之,它有点像seq扫描.区别在于,位图索引不是访问每个磁盘页面,而是将适用的索引与AND和OR一起扫描,并且只访问它需要的磁盘页面.
这与索引扫描不同,索引扫描按顺序逐行访问 - 这意味着磁盘页面可能会多次访问.
Re:你评论中的问题......是的,就是这样.
索引扫描将逐个遍历行,一次又一次地打开磁盘页面,根据需要多次打开(有些会保留在内存中,但是你明白了).
位图索引扫描将按顺序打开磁盘页面的短列表,并获取每个磁盘页面中的每个适用行(因此,您在查询计划中看到所谓的重新检查条件).
另请注意,聚类/行顺序如何影响任一方法的相关成本.如果行以随机顺序遍布整个地方,则位图索引将更便宜.(而且,事实上,如果他们真的所有的地方,一个序列扫描将是最便宜的,因为一个位图索引扫描也不是没有一些开销.)
| 归档时间: |
|
| 查看次数: |
41154 次 |
| 最近记录: |