【问题标题】:Filtering and retrieving data from db using spring data jpa使用spring data jpa从db过滤和检索数据
【发布时间】:2019-05-01 16:54:57
【问题描述】:

我使用 reactjs 作为前端,使用 spring boot 作为后端。我正在使用弹簧数据 jpa。

这是我的困境.. 我知道我编写逻辑的方式效率低下,并且想知道和理解解决问题的更好方法。

假设数据库中有数千条记录,我需要不断地立即检索它们(如果可能的话)

我在 UI 中有 2 个字段。一个是String,一个是Integer。

名称(字符串)SomeKindOfId(整数) ------------- --------------------

只有在名称字段和/或 SomeKindOfId 字段中输入 3 个字符后,我才必须过滤记录。

我怎样才能有效地做到这一点?

目前,我有

findAllByNameAndSomeKindOfId("%"+name+"%","%"+String.valueOf(SomeKindOfId)+"%")

服务中

存储库类中类似的东西

Query("Select u from SomeTable u where u.name = :name and CAST(u.someKindOfId As string) like :someKindOfId")
List<CdoDimStPortfolio> findAllByEntityStatusAndDealName(@Param("name") String name,
        @Param("someKindOfId") String someKindOfId);

我使用强制转换的原因是因为我在数据库中有 someKindOfId 作为 int

【问题讨论】:

  • 这对我来说很好(除了 = :name 应该是 like :name)。如果这还不够高效,并且您的 DBA 无法优化查询,那么您将需要使用关系数据库以外的其他东西,该数据库专为快速搜索而设计。
  • 谢谢@JBNizet。但是,[like :name] 会给我错误。

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


【解决方案1】:

进行高效数据库查询的最佳方法是根据您要搜索的值创建索引。

您可以创建一个索引“name”和“someKindOfId”,搜索这些值将是即时的,因为这就像在一本书中,如果您逐页搜索章节,您将花费更长的时间。索引并搜索它。

例如对于 postgresql:

https://www.postgresql.org/docs/9.1/sql-createindex.html

CREATE INDEX 在指定表的指定列上构造索引。索引主要用于提高数据库性能

【讨论】:

  • 谢谢@Francesc Recio,我索引的是整数字段而不是字符串字段。会试一试的。
猜你喜欢
  • 2020-08-08
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2017-01-13
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多