Para ajustar o desempenho de suas consultas, utilize as técnicas e dicas a seguir.
Quando uma consulta é executada, a cadeia de consultas deve ser analisada e um plano desenvolvido para executar a consulta, o que podem ter um alto custo. O WebSphere eXtreme Scale armazena em cache os planos de consulta pela cadeia de consulta. Visto que o cache tem um tamanho limitado, é importante reutilizar as cadeias de consultas sempre que possível. Utilizar os parâmetros nomeados ou posicionais também ajuda no desempenho, estimulando a reutilização do plano de consulta.
Positional Parameter Example Query q = em.createQuery("select c from Customer c where c.surname=?1"); q.setParameter(1, "Claus");A indexação adequada em um mapa pode ter um impacto significativo no desempenho da consulta, mesmo que a indexação tenha alguma sobrecarga no desempenho total do mapa. Se a indexação em atributos de objetos envolvidos em consultas, o mecanismo de consulta desempenha uma varredura de tabela para cada atributo. A varredura de tabela é a operação mais cara durante a execução de uma consulta. A indexação sobre atributos do objeto que são envolvidos em consultas permite que o mecanismo de consulta evite uma varredura de tabela desnecessária, melhorando o desempenho total da consulta. Se o aplicativo é designado para utilizar a consulta de maneira intensiva em um mapa que é em sua maior parte de leitura, configure índices para os atributos de objeto que estão envolvidos na consulta. Se o mapa for atualizado em sua maior parte, será necessário equilibrar entre o aprimoramento de desempenho de consulta e a sobrecarga de indexação no mapa.
Quando os POJO (Plain Old Java Objects) são armazenados em um mapa, a indexação adequada pode evitar uma reflexão Java. No exemplo a seguir, a consulta substitui a cláusula WHERE pela pesquisa de índice de intervalo, se o campo budget tiver um índice construído sobre ele. Caso contrário, a consulta varre o mapa inteiro e avalia a cláusula WHERE obtendo primeiro o orçamento utilizando o reflexo Java e, então, comparando o orçamento com o valor 50000:
SELECT d FROM DeptBean d WHERE d.budget=50000
Consulte Plano de Consulta para obter detalhes sobre como ajustar melhor consultas individuais e como sintaxe, modelos de objetos e índices diferentes podem afetar o desempenho da consulta.
Em ambientes de cliente-servidor, o mecanismo de consulta transporta o mapa de resultado inteiro para o cliente. Os dados retornados deveriam ser divididos em partes razoáveis. As interfaces EntityManager Query e ObjectMap ObjectQuery suportam os métodos setFirstResult e setMaxResults que permitem que a consulta retorne um subconjunto dos resultados.
Com a API EntityManager Query, as entidades são retornadas como parâmetros de consulta. O mecanismo de consulta retorna atualmente as chaves para essas entidades no cliente. Quando o cliente se itera sobre essas entidades utilizando o Iterator do método getResultIterator, cada entidade é automaticamente aumentada e gerenciada, como se fosse criada com o método find na interface EntityManager. Todo o gráfico da entidade é construído a partir da entidade ObjectMap no cliente. Os atributos de valor da entidade e quaisquer entidades relacionadas são ansiosamente resolvidos.
Para evitar a construção do gráfico de alto custo, modifique a consulta para retornar os atributos individuais com navegação de caminho.
Por exemplo:
// Returns an entity
SELECT p FROM Person p
// Returns attributes SELECT p.name, p.address.street, p.address.city, p.gender FROM Person p