首页 文章

如果表上有索引,如何处理表更新/插入

提问于
浏览
1

嗨,我对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

    这里有一些错误的假设 .

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

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

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

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

相关问题