Как улучшить производительность JPA-запросов и время отклика для нескольких таблиц и условий соединения - PullRequest
0 голосов
/ 23 февраля 2019

Я очень новичок в Java и пытаюсь реализовать возможность просмотра документов.Пользователь, принадлежащий к определенной группе, может просматривать документы определенных типов, которые назначены для типов документов проверки этой группы.Пользователь не может просматривать собственные документы.Когда пользователь принадлежит ко многим группам, которые могут просматривать много типов документов, иногда я получаю около 1500 документов, которые удовлетворяют условию запроса.Я пробовал пейджинг, но все еще есть некоторая видимая задержка на первой странице.Когда я получаю все документы (~ 1500), это занимает около 3000+ мс.Я не уверен, много это или нет.Мой 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);

Пожалуйста, дайте мне знать, каков наилучший способ повысить производительность, потому что у меня есть ощущение, что этот тип поиска использует «как» несколько раз в запросе и объединяет множествоСущности не правильные.

1 Ответ

0 голосов
/ 23 февраля 2019

Используйте полнотекстовый поиск вместо like.Для этого создайте полнотекстовый индекс, см. http://www.h2database.com/html/tutorial.html?highlight=fulltext&search=fulltext#fulltext

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...