【问题标题】:Working with indexes when using Spring boot + Postgresql使用 Spring boot + Postgresql 时使用索引
【发布时间】:2022-01-15 14:39:18
【问题描述】:

我知道我可以为单列和复合列创建 索引。 A 我也可以在某些表达式上创建一个 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. 如果我创建了一条记录,我是否必须在同一事务中再次调用以为此数据创建索引索引如上所述)?
  2. 删除记录时,是否还必须再次触发创建此索引
  3. 更新时,我也必须这样做吗?
  4. 如果我使用 Spring Data Jpa,是否应该通过 nativeQuery() 执行此操作?

我看不出把它分成几个问题有什么意义,实际上这是一个关于使用 Spring 和关系数据库处理索引的问题。

在使用复杂的关系数据库索引(我不是指 Couchbase)和 Spring data jpaspring boot )?

如果可能,请举个例子回答

【问题讨论】:

  • 我不知道我是否理解你的问题。一旦创建了索引,它就会一直存在,直到索引被删除(直到表上的一行被删除)。并且数据库引擎将保持更新并与表中的数据保持一致。你不需要做任何事情。
  • @Augusto,也就是说,如果我理解正确的话,当我们创建一次索引时,DBMS在删除、创建和更新操作过程中,如果字段基于哪个字段,将自动重新创建索引创建的索引受到影响,不需要从代码中管理吗?
  • 数据库会为你维护索引。您不必编写代码来执行此操作,这是标准的数据库功能。

标签: java postgresql spring-boot spring-data-jpa


【解决方案1】:

索引只需要为所有现有记录创建一次。之后,如果添加/更新/删除数据库记录,只需从索引中添加/更新/删除该记录,而不是为所有记录重新创建整个索引。

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

所以你不应该通过原生查询创建索引。你应该在启动应用程序之前单独创建它。就像您创建数据库表一样。

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 2017-11-15
    • 2019-03-31
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2017-11-04
    • 2018-06-02
    相关资源
    最近更新 更多