表中所有列的组合索引是否有任何意义?

fro*_*rik 2 postgresql index

我偶然发现了在表的所有列上设置索引的几种情况。在我看来,这将与没有索引的全表扫描一样有效。这是正确的还是这样的索引有什么好处?我已经在 Postgres 上的 Active Record 中看到了这个,所以这个设置是我的主要关注点。我也想知道这在不同的数据库之间是否以及如何不同。

dez*_*zso 5

索引是一种排序结构 - 如果您只需要表中足够小的数据部分,则可以更有效地从索引中获取数据。

不过,这需要一些先决条件:

  • PostgreSQL 9.2 或更高版本,因为此版本中出现了仅索引扫描
  • 索引支持查询(索引列的顺序决定这个)

同样值得注意的是,即使是仅索引扫描也必须访问底层表(准确地说,是它的可见性映射,如果是堆本身),以确定要返回的行是否对当前事务仍然可见。在确定上述“足够小”的含义时,也必须考虑这一点。