Проблема с запросом JPQL занимает много времени для выполнения с более чем 600000 регистраций - PullRequest
0 голосов
/ 01 октября 2019

У меня есть запрос в jpql, который обычно идет с уменьшенным количеством данных, проблема в том, что в таблице к ним более 600000 записей данных. Я использую данные Spring, с сущностью, которая не имеет отношения (без OneToMany, OneToOne, ManyToOne .....) с оракулом в качестве базы данных.

Я использовал JpaRepository, crudRepository, я даже пытался напрямую с JDBC,возврат занимает от 8 минут до 30 минут. Я думал, что проблема исходит от запроса, поэтому я попытался findAll () и время обработки осталось прежним. Я изменил настройки JVM -Xmx и -Xms, чтобы дать больше памяти, но ничего не помогает.

Вот мой запрос:

открытый интерфейс TestRepository расширяет CrudRepository {

@Query(value = "select new Test(CONCAT(t.date1, t.stringTarget, t.numInfo), t.name, t.phone, t.numInfo, t.date1, t.cotations, t.stringTarget, p.code, p.design)"
        + " from Test t, PointVente p"
        + " WHERE t.ePdv = p.numero"
        + " AND t.date1 BETWEEN :dateBegin AND :dateEnd"
        + " AND (t.state <> 'ANCL' or t.state is null)"
        + " AND t.game in :game"
        + " AND t.type in :type"
        + " AND t.participe = 1"
        + " AND NOT EXISTS (select t2.numInfo, t2.date1"
        + " from Test t2"
        + " WHERE t2.date1 BETWEEN :dateBegin AND :dateEnd"
        + " AND (t2.state <> 'ANCL' or t2.state is null)"
        + " AND t2.game in :game"
        + " AND t2.type in :type"
        + " AND t2.participe = 1"
        + " AND t2.numInfo = t.numInfo"
        + " AND t2.date1 = t.date1"     
        + " AND (t2.phone is null or t2.phone NOT IN (select b.phone from BlacklistTest b))"
        + " group by CONCAT(t2.date1, t2.numInfo), t2.name, t2.phone, t2.numInfo, t2.date1, t2.ePdv"
        + " having sum(t2.cotations) <= :target)"
        + " AND t.cotations > :target"
        + " AND (t.phone is null or t.phone NOT IN (select b.phone from BlacklistTest b))")
List<TestResult> findTest(@Param("dateBegin") Date dateBegin, @Param("dateEnd") Date dateEnd, @Param("game") List<String> game, @Param("type") List<String> type, @Param("target") BigDecimal target);

}

можно ли сократить время ответа?

Могу ли я получить вашу помощь, пожалуйста.

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