如何在多个联接表和条件上改善JPA查询性能和响应时间



我是非常新鲜的Java初学者,我正在尝试实施审查文档的可能性。属于某个组的用户可以查看分配给该组评论文档类型的特定类型的文档。用户无法查看自己的文档。当用户属于许多可以查看许多文档类型的组时,有时我会得到大约1500个符合查询条件的文档。我尝试了分页,但头版仍然有一些可见的延迟。当我获取所有文档(〜1500)时,大约需要3000多个ms。我不确定是否很多。我的JPA查询在下面。

    @Query("SELECT d FROM Document d WHERE d.id IN (SELECT DISTINCT d.id FROM Document d" +
        " JOIN d.documentType dt" +
        " JOIN dt.reviewUserGroups rug" +
        " JOIN rug.users u WHERE u.username = :username" +
        " AND d.documentState = it.akademija.wizards.enums.DocumentState.SUBMITTED" +
        " AND u <> d.author" +
        " AND (lower(CONCAT(d.author.firstname, ' ', d.author.lastname)) like %:searchFor% " +
        " OR lower(d.title) like %:searchFor%" +
        " OR lower(d.description) like %:searchFor%" +
        " OR lower(d.id) like %:searchFor%" +
        " OR lower(dt.title) like %:searchFor%))")
    Page<Document> getDocumentsForReview(@Param(value = "username") String username,
                                     @Param(value = "searchFor") String searchFor,
                                     Pageable pageable);

请让我知道什么是提高性能的最佳方法,因为我有些感觉,这种类型的搜索在查询中多次使用"喜欢"并通过许多实体加入不是正确的。

<</p>

使用fullText搜索而不是like。为此创建完整索引,请参见http://www.h2database.com/html/tutorial.html?highlight=fulltext&search = fulltext#fulltext#fulltext

最新更新