Postgresql Postgtres查询未对已编制索引的列使用索引

Postgresql Postgtres查询未对已编制索引的列使用索引,postgresql,Postgresql,今天我面临一个奇怪的问题。我在postgres中有一个很大的表(表T),它有很多列(col1..col100),并且我有索引I1(col2,col3,col4) 现在 显示表的顺序扫描,不使用索引。我认为这应该像只扫描索引一样,因为我们正在选择索引中的列 原因可能是什么?首先阅读并分析。我认为这可能会有所帮助: 如果SELECT返回表中所有行的大约5-10%(取决于配置设置和数据存储。这不是一个硬数字),则顺序扫描比索引扫描快得多 索引扫描需要对每一行执行若干IO操作(在索引中查找该行,然后从堆

今天我面临一个奇怪的问题。我在postgres中有一个很大的表(表T),它有很多列(col1..col100),并且我有索引I1(col2,col3,col4)

现在

显示表的顺序扫描,不使用索引。我认为这应该像只扫描索引一样,因为我们正在选择索引中的列


原因可能是什么?

首先阅读并分析。我认为这可能会有所帮助:


如果SELECT返回表中所有行的大约5-10%(取决于配置设置和数据存储。这不是一个硬数字),则顺序扫描比索引扫描快得多

索引扫描需要对每一行执行若干IO操作(在索引中查找该行,然后从堆中检索该行)。顺序扫描每行只需要一个IO,甚至更少,因为磁盘上的块(页)包含多行,因此可以通过单个IO操作获取多行

其他DBMS也是如此-一些优化被搁置一旁,如“仅索引扫描”(但对于SELECT*来说,这样的DBMS不太可能进行“仅索引扫描”)

请回答您的问题,并为相关表(包括所有索引)添加
create table
语句以及使用
解释(分析、缓冲、格式化文本)
生成的执行计划-请,
explain select col2,col3 from T;