【发布时间】:2016-09-29 17:02:44
【问题描述】:
Postgres 有 new release 9.6 - 我已经阅读了关于仅索引扫描的 docs。 我知道 postgres 表的堆,并且我知道部分索引(或一般索引)是如何工作的。 我只是不明白仅索引的好处。
问题
- 真正改变了什么?我们不是已经使用了仅索引扫描吗?
- 我应该如何以及何时使用它们来获得最佳收益?
非相关背景:
我正在处理生产环境中包含大量 INSERTs 和 SELECTs 的 6B 行表
【问题讨论】:
Postgres 有 new release 9.6 - 我已经阅读了关于仅索引扫描的 docs。 我知道 postgres 表的堆,并且我知道部分索引(或一般索引)是如何工作的。 我只是不明白仅索引的好处。
非相关背景:
我正在处理生产环境中包含大量 INSERTs 和 SELECTs 的 6B 行表
【问题讨论】:
当索引的 WHERE 子句引用未编入索引的列时,允许对部分索引使用仅索引扫描
(强调我的)
所以在 9.5 及之前的版本中,以下索引不能用于仅索引扫描:
create index on foo (col1, col2)
where col3 = 42;
因为col3 不是索引列的一部分。这在 9.6 中发生了变化
【讨论】: