1

新しいアプリケーションには、JPAoverJDBCを使用したいと思います。私はJPAエンティティマネージャーの名前付きクエリと基本的なCRUDメソッドを厳密に使用しています。これにより、(Hibernateまたはその他のJPA実装を使用して)データベースで実行されるすべてのSQLネイティブクエリを抽出できます。この静的クエリのリストを使用して、要求のすべての実行プランであるDB2パッケージを構築できることを理解しています。

だから私の質問は:DB2に対してJDBCを介してこれらのクエリを実行すると、それらの実行プランが利用されるかどうかです。PureQuery製品がSQLオーダーのリストをキャプチャできることを理解しています。PureQuery固有のAPIではなくJDBCを介して、より多くの機能を提供しますか?そのような特定のDB2静的バインド機能?または、JDBCと同等ですか?

答えてくれてありがとう。

4

1 に答える 1

4

JDBC アプリケーションは動的 SQL のみを実行します (つまり、DB2 は静的パッケージを使用しません)。

静的 SQL (クエリがデータベース内のパッケージに格納される) を取得する方法は 2 つしかありません: SQLJ を使用してアプリケーションを作成する (JPA/Hibernate を排除する) か、pureQuery を使用する (JDBC とデータベースの間にある)。

動的 SQL を使用しても、DB2 はクエリの実行プランをキャッシュすることに注意してください。したがって、クエリが頻繁に実行される (つまり、キャッシュに残っている) 場合、クエリのコンパイルによるオーバーヘッドは見られません。キャッシュは、クエリがバイトごとに正確に一致する場合にのみ役立ちます。したがって、 、または とselect * from t1 where c1 = 1同じではありません(同じ結果が得られますが、クエリは異なります)。パラメータ マーカー ( ) を使用することが重要です。DBA は、カタログ キャッシュのサイズを調整して、このキャッシュのヒット率を最大化できます。select * from t1 where c1 = 2select * from t1 where C1 = 1select * from t1 where c1 = ?

キャッシングはクエリを繰り返しコンパイルするのを避けるのに役立ちますが、静的 SQL が提供するプランの安定性を提供しないため、YMMV.

于 2010-03-18T20:11:27.050 に答える