Ajuste del rendimiento de consulta

Para ajustar el rendimiento de las consultas, utilice estas técnicas y sugerencias.

Uso de parámetros

Cuando se ejecuta una consulta, la serie de consulte se debe analizar y debe desarrollarse un plan para ejecutar la consulta, ambas operaciones pueden resultar costosas.WebSphere eXtreme Scale almacena en la memoria caché los planes de consulta por la serie de consulta. Puesto que la memoria caché tiene un tamaño finito, es importante reutilizar las series de consulta siempre que sea posible. El uso de parámetros posicionales o con nombre favorece el rendimiento al fomentar la reutilización de los planes de consulta.

Ejemplo de parámetro posicional Query q = em.createQuery("select c from Customer c where c.surname=?1"); q.setParameter(1, "Claus");

Uso de índices

El uso de índices adecuados en una correlación puede tener un impacto significativo en el rendimiento de las consultas, a pesar de que los índices puedan implicar una sobrecarga en el rendimiento global de la correlación. Si no se dispone de índices en los atributos de objeto de las consultas, el motor de consultas realiza una exploración de la tabla de cada atributo. La exploración de tabla es la operación más cara durante la ejecución de una consulta. El uso de índices en atributos de objetos de las consultas permite que el motor de consultas no tenga que realizar una exploración innecesaria de la tabla, lo cual mejora el rendimiento global de la consulta. Si se ha diseñado la aplicación para usar las consultas de forma intensiva en una correlación sobre todo de lectura, configure los índices para atributos de objeto involucrados en la consulta. Si la correlación se actualiza continuamente, debe sopesar entre mejorar el rendimiento de la consulta y la sobrecarga de índices en la correlación.

Cuando se almacenan objetos POJO (plain old Java Object) en una correlación, una indexación correcta puede evitar un reflejo Java. En la consulta del ejemplo siguiente, la cláusula WHERE se sustituye por la búsqueda de índices de intervalo, si el campo de presupuesto tiene un índice. De lo contrario, la consulta explora toda la correlación y evalúa la cláusula WHERE de la siguiente manera: primero obtiene el presupuesto mediante un reflejo de Java y después lo compara con el valor 50000:

SELECT d FROM DeptBean d WHERE d.budget=50000

Consulte el apartado Plan de consulta para obtener información sobre cómo ajustar consultas individuales y cómo pueden afectar sintaxis diferentes, modelos de objetos e índices al rendimiento de la consulta.

Uso de la paginación

En entornos cliente/servidor, el motor de consultas transporta toda la correlación de resultados al cliente. Los datos devueltos deben dividirse en partes razonables. Las interfaces EntityManager Query y ObjectMap ObjectQuery admiten los métodos setFirstResult y setMaxResults que permiten que la consulta devuelva un subconjunto de resultados.

Devolución de valores primitivos en lugar de entidades

Con la API de consulta EntityManager, las entidades se devuelven como parámetros de consulta. El motor de consultas devuelve actualmente las claves de estas entidades al cliente. Cuando el cliente itera en estas entidades mediante el uso de Iterator del método getResultIterator, cada entidad se infla automáticamente y se gestiona como si se creara con el método find de la interfaz EntityManager. Todo el gráfico de la entidad se crea a partir del objeto ObjectMap de entidad en el cliente. Los atributos del valor de entidad y las entidades relacionadas se resuelven rápidamente.

Para no tener que crear el tan costoso gráfico, modifique la consulta de modo que devuelva los atributos individuales con navegación de vías de acceso.

Por ejemplo:

//
Devuelve una entidad
SELECT p FROM Person p
// Devuelve atributos SELECT p.name, p.address.street, p.address.city, p.gender
FROM Person p