使用 Spring boot + Postgresql 时使用索引

Working with indexes when using Spring boot + Postgresql

我知道我可以为单列和复合列创建 索引。我也可以在某些表达式上创建 index:

(就像使用 Couchbase 时的索引)

CREATE INDEX `us_users_sorted` ON
`user_profile`(
    `_class`,
    `enabled`,
    `countryCode`,
    `firstName` DESC,
    `lastName` DESC)
WHERE (((`_class` = "com.cb.demo.userProfile.model.UserEntity")
    and (`enabled` = true))
    and (`countryCode` = "US"))

但是我找不到这方面的信息:

  1. 如果我创建一条记录,我是否必须在同一事务中再次调用以为该数据创建一个索引index 如上所述) ?
  2. 删除一条记录时,我是否也必须再次触发创建此索引
  3. 更新时,我也必须这样做吗?
  4. 如果我使用 Spring Data Jpa,我是否应该通过 nativeQuery() 执行此操作?

我看不出将其分成几个问题的意义,事实上,这是一个关于使用 Spring 和关系数据库处理索引的问题。

也许有人在网上看到了一个详细的例子,在使用复杂的关系数据库索引(我不是说 Couchbase)和 Spring 数据 jpa (spring 开机)?

如果可以的话,请举例说明

只需要为所有已有的记录建立一次索引。之后,如果 DB 记录是 added/updated/deleted,它只需要从索引中 add/update/removed 这样的记录,而不是为所有记录重新创建整个索引。

你可以认为索引就像存在另一个 HashMap 一样,它允许你通过一些键快速检索记录。但是每当与该索引相关的 table 中的 added/updated/deleted 记录时,数据库将帮助自动维护此 HashMap 的内容。创建一个索引就像你初始化这个 HashMap 的内容一样只做了一次。

因此您不应通过本机查询创建索引。您应该在启动应用程序之前预先单独创建它。就像你创建一个数据库 table.