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

标签 database postgresql indexing non-clustered-index

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

  • postgres 不支持经典概念的索引
  • postgres 中的所有索引都是非聚集索引
  • 索引不分配任何新空间,但对表进行排序 这就是创建索引后的 CLUSTER 命令。
  • 在文档中指出,在对表进行更新/插入后,索引会自动更新

显示我使用 col1、col2、col3、col4 和基于 col2、col3 的索引创建了一个表。与 col2、col3 相关的选择速度提高了 15 倍。 当我执行 select * from table 时,结果首先显示为基于 col2 排序,然后基于 col3 排序。

当我在表中添加一个新行(具有已经存在的 col2 值 (test_value))时,该行位于表的末尾(这是通过 select * from table 检查的)。

1) 即使全选显示末尾的行,索引是否自动更新为这个新条目?

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

最佳答案

这里有一些错误的假设。

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

行的存储方式和索引信息是分开的

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

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

关于database - 如果表上有索引,如何处理表更新/插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46572094/

相关文章:

mysql - 如何计算连字符之前的结果总数?

postgresql - 在 plpgsql 函数中锁定表

postgresql - Spring Boot 无法使用 PostgreSQL 驱动程序加载 DataSource

javascript - 数组索引 N.O. + 值(value)

arrays - 将 3D 中的元素从 "triangle"映射到线性结构

mongodb - 为什么这个 MongoDB 更新不起作用?

Android 无法从 Assets 复制数据库

sql - 根据条件 SQL 复制行

algorithm - PostgreSQL:自动分区表

python - 询问用户列表的索引,Python