我想使用JPA超过JDBC用于新的应用程序。我严格使用命名查询和JPA实体管理器,它可以让我(与Hibernate的帮助下,或任何其他JPA实现)的基本CRUD方法提取,将在数据库上执行的所有SQL本机查询。随着静态查询的这个名单,我知道我可以建立一个DB2包,是我请求所有的执行计划。

所以我的问题是:是否通过执行对DB2 JDBC这些查询将利用这些执行计划的优势,还是不行?我明白的pureQuery产品可以捕捉SQL命令的列表。这样做,仍然可以通过JDBC而不是通过特定的pureQuery API,提供更多?这种特定的DB2静态绑定功能?或它相当于JDBC?

谢谢你的任何一块答案。

有帮助吗?

解决方案

JDBC应用程序执行动态SQL只(即DB2不使用静态包)。

有只有2种方式来获得静态SQL(其中查询存储在数据库中的包):写使用SQLJ(消除JPA /休眠)应用程序或使用的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 = ?)是关键。 DBA可以调整目录高速缓存的大小,以帮助最大化该高速缓存的命中率。

虽然缓存有助于避免重复编译查询,它不提供该计划的稳定静态SQL呢,所以因人而异。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top