1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

JPA - Performance

Pessoal,

Tenho uma base com aproximadamente 3 milhões de documentos onde tenho uma chave única e tenho também uma data de geração do documento.

Sendo que vou armazenar um novo documento, tenho que checar se o mesmo não existe e caso exista, não armazeno.

Se eu buscar somente pela chave, teoricamente estarei buscando em 3 milhões de documentos sempre que um novo chegar.

Porém, posso buscar por 2 parâmetros. Data de emissão e depois chave.

Pergunta: qual a forma mais recomendada para se fazer isso? Fazer uma busca somente por chave ou data de emissão e chave?

Obs: os dois campos estão indexados.


        return em.createQuery("select n from Nfe n where n.chave = :chave", Nfe.class)
                    .setParameter("chave", chave)
                    .setMaxResults(1)
                    .setFirstResult(0)
                    .getResultList();
  • Buscar por data normalmente é MUITO mais custoso.

    Como os dois estão indexados, não sei se teria problemas, mas, mesmo assim, eu buscaria pela chave.

    Thales Minussi   12 de set de 2014
  • Eu teria como fazer uma busca pela chave, porém trazendo o primeiro resultado encontrado? Assim não seria feita uma busca na base inteira.

    jbdeandrade   12 de set de 2014
  • Você só quer trazer um resultado, é isso? Se sim, use "limit 1"

    Thales Minussi   12 de set de 2014
  • Se for pela PK, automaticamente já irá retornar apenas 1 registro, não sendo necessário informar o limit.

    lucastody   12 de set de 2014
  • Neste caso não é pela PK. É uma chave de NFE. Acho que o limit é o caminho. O limit eu tenho que aplicar na getResultList certo?

    Se eu der um setMaxResult(1) acho que também não afetaria a performance né?

    jbdeandrade   12 de set de 2014
Mostrar todos os 6 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java jpa ou faça a sua própria pergunta.