如果表

时间:2017-10-04 18:48:09

标签: database postgresql indexing non-clustered-index

嗨我对postgres中索引的处理有点困惑。我使用9.6版本。根据我的理解,阅读postgres文档和stackoverflow的答案后,我想验证以下内容:

  • postgres不支持带有经典概念的索引
  • postgres中的所有索引都是非聚集索引
  • 索引不会分配任何新空间,而是对表应用排序 这就是创建索引之后的一个CLUSTER命令。
  • 在文档中声明,在表上更新/插入后索引会自动更新

Show我创建了一个包含col1,col2,col3,col4的表和一个基于col2,col3的索引。选择与col2有关,col3变得快15倍。 当我从表中执行select *时,结果显示首先根据col2排序,然后基于col3。

当我在表中添加一个新行(带有已存在的col2值(test_value))时,该行位于表的末尾(使用:select * from table进行检查)。

1)即使select all显示最后一行,索引是否自动更新了这个新条目?

2)如果执行查询将在col2上具有test_value的所有行将会发生什么?我能通过索引获得所有结果吗?

1 个答案:

答案 0 :(得分:0)

这里有一些错误的假设。

最重要的是:除非包含ORDER BY,否则select中行的顺序是不确定的。因此,您可以获得任何结果,数据库引擎决定获取数据的速度更快。因此,如果select * from table返回结尾处的最后一个插入元素,则不会告诉您有关索引的任何信息。

如何存储行和索引信息是单独的东西

1)是的,插入后索引已更新。

2)是的,因为索引已经更新。