У меня есть запрос в 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);
}
можно ли сократить время ответа?
Могу ли я получить вашу помощь, пожалуйста.