PG中的几种索引方式
一、全表扫描(Seq Scan)
当数据表中没有索引,或者满足条件的数据集较大,索引扫描的成本高于全表扫描,这时规划器会选择使用全表扫描。
二、索引扫描(index scan)
查询列时有索引,则直接扫描索引,不再进行全表扫描,耗费时间小于顺序扫描。
多了筛选条件后,会打开每条记录,进行筛选记录,花费时间变多了。但是,将筛选条件放到扫描里面是有好处的,
尤其是在多表join时,构造自然选择的块有很大的区别
三、全索引扫描(index only scan)
当查询的条件都在索引中,也会走该扫描方式,不会读取表文件
四、位图扫描(Bitmap Index Scan)
也是一种走索引的方式,方法是扫描索引,把满足条件的行或者块在内存中建一个位图,扫描完索引后,再跟
进位图中记录的指针到表的数据文件读取相应的数据。在or、and、in子句和有多个条件都可以同时走不同的索引时,都可能走Bitmap Index Scan 。
五、Bitmap Index Scan和Index Scan扫描的区别
Index scan: 输出的是tuple,它先扫描索引块,然后得到rowid扫描数据块得到目标记录。一次只读一条索引项,那么一个 PAGE面有可能被多次访问。
Bitmap index scan; 输出的是索引条目,并不是行的数据,输出索引条目后,交给上一个节点 bitmap heap scan(之间可能将索引条目根据物理排列顺序进行排序)。
一次性将满足条件的索引项全部取出,然后交给bitmap heap scan节点,并在内存中进行排序, 根据取出的索引项访问表数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?