Galera,
Com a ajuda da equipe de DBA consegui identificar que o campo, por se tratar de um campo varchar, não estava sendo delimitado com as aspas simples pelo JPA como deveria.
Dessa forma, o banco não utiliza o índice desse campo.
Estou utilizando a Specifications do Spring para gerar uma consulta dinâmica. E como é a primeira vez que a utilizo, tenho o seguinte método e gostaria de a avaliação de vocês quanto a melhor maneira de implementação.
public List<MinhaTabela> buscar(final Entidade campo1, final Entidade campo2, final List<String> campo3, final String campo4,
final String campo5, final Date campo6, final Date campo7, final Date campo8,
final Date campo9, final String campo10, final Produto campo11){
Specification<MinhaTabela> spec = new Specification<MinhaTabela>() {
@Override
public Predicate toPredicate(Root<MinhaTabela> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate p1 = null, p2 = null, p3 = null, p4 = null, p5 = null, p6 = null, p7 = null, p8 = null, p9 = null, p10 = null, p11 = null;
p1 = cb.equal(root.get(MinhaTabela_.campo1), campo1.getProcessador().getCod());
if(campo2 != null){
p2 = cb.equal(root.get(MinhaTabela_.campo2), campo2.getProcessador().getCod());
}
if(campo3 != null && !campo3.isEmpty()){
p3 = root.get(MinhaTabela_.campo3).in(campo3);
}
if(campo4 != null){
p4 = cb.equal(root.get(MinhaTabela_.campo4), campo4);
}
if(campo5 != null){
p5 = cb.equal(root.get(MinhaTabela_.campo5), campo5);
}
if(campo6 != null){
p6 = cb.greaterThanOrEqualTo(root.get(MinhaTabela_.campo6), campo6);
}
if(campo7 != null){
p7 = cb.lessThanOrEqualTo(root.get(MinhaTabela_.campo7), campo7);
}
if(campo8 != null){
p8 = cb.equal(root.get(MinhaTabela_.campo8), campo8);
}
if(campo9 != null){
p9 = cb.equal(root.get(MinhaTabela_.campo9), campo9);
}
if(campo10 != null){
p10 = cb.equal(root.get(MinhaTabela_.campo10), campo10);
}
if(campo11 != null){
p11 = cb.equal(root.get(MinhaTabela_.campo11), campo11.getCod());
}
return cb.and(verifyNotNull(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11));
}
};
return transacaoRepository.findAll(spec);
}
O campo4, que é uma String, possui um índice. Porém da maneira que está, o framework não está enviando o valor do campo com as aspas. Isso faz com que o banco não utilize o índice.
Se alguém souber uma forma para contornar isso agradeço.