Выполнение статических SQL-запросов к DB2 без PureQuery - PullRequest
1 голос
/ 18 марта 2010

Я бы хотел использовать JPA поверх JDBC для нового приложения. Я строго использую именованные запросы и основные методы CRUD JPA Entity Manager, который позволяет мне (с помощью Hibernate или любой другой реализации JPA) извлекать все собственные SQL-запросы, которые будут выполняться в базе данных. С этим списком статических запросов я понимаю, что могу создать пакет DB2, который является всеми планами выполнения моих запросов.

Итак, мой вопрос: будет ли выполнение этих запросов через JDBC для DB2 использовать преимущества этих планов выполнения или нет? Я понимаю, что продукт PureQuery может захватывать список заказов sql. Предоставляет ли он еще через JDBC, а не через API, специфичный для PureQuery, больше? такая специфическая функция статического связывания DB2? или это эквивалентно JDBC?

Спасибо за любой ответ.

1 Ответ

4 голосов
/ 18 марта 2010

JDBC-приложения выполняют только динамический SQL (т. Е. DB2 не использует статические пакеты).

Есть только 2 способа получить статический SQL (где запросы хранятся в пакете в базе данных): написать свое приложение, используя SQLJ (который исключает JPA / Hibernate), или использовать pureQuery (который находится между JDBC и базой данных) .

Имейте в виду, что даже при использовании динамического SQL DB2 кэширует планы выполнения запросов, поэтому, если они выполняются достаточно часто (т. Е. Они остаются в кэше), вы не увидите накладных расходов при компиляции запросов. Кэш полезен только в том случае, если запросы являются точными байтовыми совпадениями, поэтому select * from t1 where c1 = 1 не совпадает с select * from t1 where c1 = 2 и не select * from t1 where C1 = 1 (что дает тот же результат, но запрос отличается). Использование маркеров параметров (select * from t1 where c1 = ?) является ключевым. Администратор базы данных может настроить размер кэша каталога, чтобы максимизировать коэффициент попадания в этот кэш.

Хотя кэширование помогает избежать повторной компиляции запроса, оно не обеспечивает стабильность плана, как статический SQL, поэтому YMMV.

...