65
A
回答
85
最好的解释来from Tom Lane,这是该算法的作者,除非我弄错。另请参阅wikipedia article。
总之,这是一个有点像序列扫描。区别在于,与其访问每个磁盘页面不同,位图索引扫描AND和ORs适用索引,并且只访问它需要的磁盘页面。
这是一个索引扫描,其中指数是由行顺序访问行的不同 - 这意味着一个磁盘页面可能会多次访问。
回复:您的评论中的问题...是的,就是这样。
索引扫描将通过行一个接一个,一次又一次地打开磁盘页面,需要多次(当然留在记忆的一些意愿,但你明白了吧)。
位图索引扫描将按顺序打开磁盘页面的短列表,并抓取每个磁盘页面中的每个适用行(因此您在查询计划中看到所谓的复检cond)。
请注意,另一方面,聚类/行顺序如何影响任一方法的相关成本。如果行以随机顺序遍布整个地方,则位图索引将更便宜。 (事实上,如果它们确实是全部以上的地方,seq扫描将是最便宜的,因为位图索引扫描不是没有一些开销。)
相关问题
- 1. 为什么我的查询计划会生成索引扫描?
- 2. postgres中的Seq扫描和位图堆扫描有什么区别?
- 3. 了解缓慢位图扫描堆在LIKE查询
- 4. 在mysql查询计划中发生意外的索引扫描
- 5. Postgres缓慢的位图堆扫描
- 6. SELECT DISTINCT,摆脱位图堆的扫描
- 7. 计划磁盘扫描
- 8. 如何确定位图堆扫描和索引扫描?
- 9. 查询扫描和蓝牙堆栈
- 10. Postgres:加速位图堆扫描?
- 11. 堆中的并发标记扫描生成是什么?
- 12. 什么是VGA编程中的“扫描”?
- 13. 什么是MongoDB中的集合扫描?
- 14. 什么是扫描:Java中的块?
- 15. MonetDB查询计划解释中的语句是什么意思?
- 16. SQLite查询计划中的数字是什么意思?
- 17. Oracle中的单行子查询 - 连接计划是什么?
- 18. 为什么在我的查询中使用秒扫描Postgresql
- 19. 什么是PNO的区别扫描和WLAN预设扫描?
- 20. 计划扫描wpa_supplicant守护进程
- 21. 为什么在此查询中使用聚簇索引扫描?
- 22. 为什么我的查询执行聚集索引扫描
- 23. 为什么查询扫描发现8X倍的文件 -
- 24. CSS扫描媒体查询
- 25. greenplum中的表扫描和seq扫描有什么区别
- 26. 位图扫描0,跨越
- 27. 是什么导致DMV显示NULL查询计划?
- 28. 什么是“扫描工作副本”
- 29. 这个子查询为什么要执行表扫描?
- 30. 为什么Oracle对此查询使用跳过扫描?
因此,“位图堆扫描”:一页不能一次访问!但是“索引可以”:一个页面可以被访问多次,因为索引是按顺序逐行访问的。 – francs