嗨我对postgres中索引的处理有点困惑。我使用9.6版本。根据我的理解,阅读postgres文档和stackoverflow的答案后,我想验证以下内容:
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的所有行将会发生什么?我能通过索引获得所有结果吗?
答案 0 :(得分:0)
这里有一些错误的假设。
最重要的是:除非包含ORDER BY
,否则select中行的顺序是不确定的。因此,您可以获得任何结果,数据库引擎决定获取数据的速度更快。因此,如果select * from table
返回结尾处的最后一个插入元素,则不会告诉您有关索引的任何信息。
如何存储行和索引信息是单独的东西
1)是的,插入后索引已更新。
2)是的,因为索引已经更新。